
私は次のことを達成したいと思います:
list=()
while read i; do
list+=("$i")
done <<<"$input"
そして
IFS=$'\n' read -r -a list <<<"$input"
私は何が間違っていましたか?
input=`/bin/ls /`
IFS=$'\n' read -r -a list <<<"$input"
for i in "${list[@]}"; do
echo "$i"
done
リストは印刷する必要があります/
が、最初の項目だけがインポートされます。
答え1
答え2
bash
サポートされていないバージョンの場合mapfile
IFS=$'\n' read -ra list -d '' <<< "$input"
問題を解決しなければならない
答え3
Bashバージョン3(および4)用のソリューション
私は偶然Bash 3を実行しているCentOS 5システムにログインし、解決策を研究しています。私はすでにcuonglmの答えを賛成していますが、Bash 3(および4)で動作する私が思いついた解決策も投稿すると思いました。名前にスペースが含まれている1つのファイルと-
。
変える
IFS=$'\n' read -r -a list <<<"$input"
コマンド置換を使用して配列を作成して埋めます。
IFS=$'\n' # split on newline only
set -f # disable globbing
list=($(printf "%s" "$input"))
注:名前に改行文字を含むファイル名は機能しません。