変数またはコマンドの出力のいずれかでbashの行を適切に反復するにはどうすればよいですか?IFS変数を新しい行に設定するだけでコマンドの出力が機能しますが、新しい行を含む変数を処理する場合は機能しません。
例えば
#!/bin/bash
list="One\ntwo\nthree\nfour"
#Print the list with echo
echo -e "echo: \n$list"
#Set the field separator to new line
IFS=$'\n'
#Try to iterate over each line
echo "For loop:"
for item in $list
do
echo "Item: $item"
done
#Output the variable to a file
echo -e $list > list.txt
#Try to iterate over each line from the cat command
echo "For loop over command output:"
for item in `cat list.txt`
do
echo "Item: $item"
done
これにより、出力が得られます。
echo:
One
two
three
four
For loop:
Item: One\ntwo\nthree\nfour
For loop over command output:
Item: One
Item: two
Item: three
Item: four
ご覧のとおり、変数をエコーするか、cat
コマンドを反復処理すると、各行が1行ずつ正しく印刷されます。ただし、最初のforループは、すべてのアイテムを1行に出力します。何か案は?
すべての回答に対するコメント:改行文字を削除するには、$(echo "$ line" | sed -e 's / ^ [[:space:]] * //')を実行する必要がありました。
—
servermanfail