【发布时间】:2016-01-21 18:42:57
【问题描述】:
我有一个脚本,我从中返回多个值,每个值都在一个新行上。为了将这些值捕获为 bash 变量,我使用了 read 内置函数(推荐使用 here)。
问题是当我使用换行符作为read 的分隔符时,我似乎总是得到一个非零的退出代码。这对我的其他脚本造成了严重破坏,这些脚本会检查操作的结果。
这是我正在做的事情的精简版:
$ read -d '\n' a b c < <(echo -e "1\n2\n3"); echo $?; echo $a $b $c
1
1 2 3
注意1的退出状态。
我不想重写我的脚本(上面的 echo 命令)以使用不同的分隔符(因为在代码的其他位置使用新行是有意义的)。
如何让read 在成功读取 3 个值时发挥出色并返回零退出状态?
更新
嗯,看来我可能错误地使用了“分隔符”。从手册页:
-d *delim* The first character of delim is used to terminate the input line, rather than newline.
因此,我可以达到预期结果的一种方法是这样做:
read -d '#' a b c < <(echo -e "1\n2\n3\n## END ##"); echo $?; echo $a $b $c
也许还有更好的方法?
【问题讨论】:
-
你应该写
-d $'\n'。否则,分隔符是反斜杠(可能永远不会真正读取,因为您没有使用read的-r选项)。
标签: bash io-redirection built-in