我想创建一个oneliner循环来读取和检查它读取的内容。
这肯定行不通:
while [[ read line != "q" ]]; do; echo "enter q to quit: "; done
这里的Zsh告诉我condition expected: read
。
也许read
甚至没有这个返回值的概念。
答案 0 :(得分:2)
如果接受命令。 [是一个命令,而不是if语句的语法标记。它等同于test命令,但最终参数必须是]。
[[
不是if
条件的特殊语法。 [[
本身就是一个命令。尝试这样的循环:
while read -r line; do
[[ $line = "q" ]] && break
# more code
done
read
在无法读取表达式时返回失败,[[
是一个命令,因此可行。有关详细信息,请参阅http://mywiki.wooledge.org/BashFAQ/001。
注意:将-r
切换为read
是一个好主意 - 它会阻止输入中出现反斜杠的有趣事情。
答案 1 :(得分:-1)
while read line; do; [[ "$line" == 'q' ]] && break; done;
似乎有效。
但我不确定为什么我无法用[[ ]]
替换[ ]
,它奇怪地失败了:
$ bash
bash-3.2$ while true; do; read line; [ "$line" == 'q' ] && break; done;
bash: syntax error near unexpected token ';'
$ while true; do; read line; [ "$line" == 'q' ] && break; done;
ajlfkj
zsh: = not found