我正在使用bash,我正在尝试做类似的事情:
A=1
while [ $A=1 ]; do
read line
echo $line | grep test >/dev/null
A=$?
echo $A
done
即使grep成功完成且A设置为0,此脚本也永远不会结束。我在这里缺少什么?下面是输出的示例。
$ ./test.sh
ASDF
1
测试
0
HM ...
1
答案 0 :(得分:8)
答案 1 :(得分:5)
我发现Bash的语法非常糟糕 - 你尝试过类似的东西吗?
而[$ A -eq 1] ......?
它可能会尝试将1重新分配给$ A或类似的奇怪的东西。
答案 2 :(得分:4)
尝试:
while [ $A -eq 1 ]; do
答案 3 :(得分:3)
大多数答案都集中在整数/字符串和间距问题上,这很好,但是你的代码看起来非常简单,IMO应该完全重新考虑。假设这个想法是处理行,直到一行匹配正则表达式'test':
while read line; do
if [[ "$line" =~ test ]] && break
# do something with $line
done
当然,如果您利用sed:
等文本处理工具,可以进一步简化这一过程sed -e '/test/,$d'
答案 4 :(得分:1)
你可以这样做。无需调用外部grep。
while true; do
read line
case "$line" in
*test* ) break;;
esac
done
echo $line
答案 5 :(得分:-1)
你没试过这个
while [ $A == "1" ] .... done
修改哎呀 Dan 提到我的错误我慷慨地承认我的错误,并相应地对其进行了编辑 - 谢谢 丹 为抬头......
while [ $A -eq 1 ] .... done
抱歉! :( 希望这可以帮助, 最好的祝福, 汤姆。
答案 6 :(得分:-1)
您的所有答案都在Advanced Bash-Scripting guide。太棒了。