Mic*_*udl 6 bash heredoc while-loop herestring
假设一个文件file
有多行。
$ cat file
foo
bar
baz
Run Code Online (Sandbox Code Playgroud)
进一步假设我希望用 while 循环遍历每一行。
$ while IFS= read -r line; do
$ echo $line
$ # do stuff
$ done < file
foo
bar
baz
Run Code Online (Sandbox Code Playgroud)
最后,请假设我希望传递存储在变量中的行而不是存储在文件中的行。如何循环保存为变量的行而不收到以下错误?
$ MY_VAR=$(cat file)
$ while IFS= read -r line; do
$ echo $line
$ # do stuff
$ done < $(echo "$MY_VAR")
bash: $(echo "$MY_VAR"): ambiguous redirect
Run Code Online (Sandbox Code Playgroud)
您有多种选择:
done <<<"$MY_VAR"
Heredoc(符合 POSIX 标准,将与 一起使用/bin/sh
):
done <<EOF
$MY_VAR
EOF
Run Code Online (Sandbox Code Playgroud)进程替换(也是一个非 POSIX 扩展,但使用printf
而不是使其在支持它的 shell 中更具可预测性;请参阅POSIX 规范echo
中的应用程序使用说明):echo
done < <(printf '%s\n' "$MY_VAR")
请注意,前两个选项将(在 bash 中)使用变量的内容在磁盘上创建一个临时文件,而最后一个选项使用 FIFO。
<
后面需要跟一个文件名。您可以使用此处的字符串:
done <<< "$MY_VAR"
Run Code Online (Sandbox Code Playgroud)
或过程替换:
done < <(echo "$MY_VAR")
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5669 次 |
最近记录: |