【发布时间】:2011-03-25 13:45:53
【问题描述】:
我的代码:
#!/bin/sh
#filename:choose.sh
read choose
[ "$choose" == "y" -o "$choose" == "Y" ] && echo "Yes" && exit 0
[ "$choose" == "n" -o "$choose" == "N" ] && echo "No" && exit 0
echo "Wrong Input" && exit 0
但是当我执行时
sh ./choose.sh
终端提示我
[: 4: n: :Unexpected operator
[: 5: n: :Unexpected operator
我的 bash 脚本有什么错误吗? 谢谢!
【问题讨论】:
-
当我在 Linux 和 cygwin 中执行相同的代码时,我没有收到任何错误
-
Cygwin 很可能将
sh别名为bash。有些发行版不再提供真正的sh。尽管有些人会争辩(我倾向于同意),如果您要编写可移植的脚本,请将其写入sh而不是bash。 -
我的问题是我需要
source foobar.sh而不是./foobar.sh -
两个错误:1.使用“=”而不是“== for /bin/sh 2.不处理空字符串。做 ${choose}BLAH == yBLAH 来解决这个问题。所以这在技术上也不是一个重复的问题。
-
@personal_cloud,请不要推荐
${choose}BLAH方法——最好只引用"$choose";自 1970 年代以来就不再需要常量前缀/后缀(只要避免在当前 POSIXtest标准中标记为过时的功能,如-a或-o)。