So übergeben Sie eine Heredoc-definierte Variable an den Befehl

So übergeben Sie eine Heredoc-definierte Variable an den Befehl

Wie kann ich diese Heredoc-definierte Variable an einen Befehl übergeben?

read -r -d '' tables <<'EOF'
table1
table2
table3
EOF

tables=$(tr '\n' ' ' < "$tables");

Ich möchte, dass die Tabellenvariable wie folgt definiert wird:

table1 table2 table3

Antwort1

Mit Bash können Sie einenHier-Zeichenfolge

tables=$(tr '\n' ' ' <<< "$tables")

Mit anderen Shells können Sieein andererhier Dokument

tables=$(tr '\n' ' ' << END
$tables
END
)

Antwort2

Normalerweise verwende ich einfach eine mehrzeilige Zeichenfolge.

tables="
table1
table2
table3"

echo $tables
for table in $tables; do echo $table; done

Ihr heredocwird auf meinem System gleichwertig behandelt

Antwort3

Sobald Sie Ihre mehrzeilige Variable haben, können Sie einfach Folgendes verwenden echo:

echo "$tables" | tr '\n' ' '

Stellen Sie sicher, dass Sie doppelte Anführungszeichen verwenden, umschützendie Zeilenumbrüche. Vergleichen Sie:

$ echo $tables | tr '\n' '_'
table1 table2 table3_

mit:

$ echo "$tables" | tr '\n' '_'
table1_table2_table3_

verwandte Informationen