假设文件file
有多行。
$ cat file
foo
bar
baz
进一步假设我希望用while循环遍历每一行。
$ while IFS= read -r line; do
$ echo $line
$ # do stuff
$ done < file
foo
bar
baz
最后,请假设我希望传递存储在变量中的行而不是存储在文件中的行。如何在没有收到以下错误的情况下循环保存为变量的行?
$ MY_VAR=$(cat file)
$ while IFS= read -r line; do
$ echo $line
$ # do stuff
$ done < $(echo "$MY_VAR")
bash: $(echo "$MY_VAR"): ambiguous redirect
答案 0 :(得分:2)
您有几种选择:
done <<<"$MY_VAR"
一个heredoc(符合POSIX标准,适用于/bin/sh
):
done <<EOF
$MY_VAR
EOF
进程替换(也是非POSIX扩展,但使用printf
而非echo
使其在支持它的shell中更具可预测性;请参阅{{中的APPLICATION USAGE说明3}}):done < <(printf '%s\n' "$MY_VAR")
请注意,前两个选项将(在bash中)在磁盘上使用变量的内容创建一个临时文件,而最后一个使用FIFO。
答案 1 :(得分:1)
<
后面需要一个文件名。你可以使用here-string:
done <<< "$MY_VAR"
或流程替换:
done < <(echo "$MY_VAR")