在 bash 脚本中,我愿意检查参数是否具有布尔值(“true”或“false”)。
我正在以两种不同的方式在两个脚本中尝试此操作,但都失败了。
我已经检查了许多 Stack Exchange 提示,并且我相信做了我应该做的事情,但事实并非如此。
if [ "$2" != "true" ] -a [ "$2" != "false" ]; then
echo "Indiquez si Geoserver est en installation initiale (false) ou update (true)" >&2;
exit 1;
fi
Run Code Online (Sandbox Code Playgroud)
失败并显示消息Geoserver.sh: 12: [: true: unexpected operator
if [[ "$3" != "true" && "$3" != "false" ]]; then
echo "Indiquez si Kafka est en installation initiale (false) ou update (true)" >&2;
exit 1;
fi
Run Code Online (Sandbox Code Playgroud)
失败了Kafka.sh: 18: [[: not found
ilk*_*chu 12
标准方法是
[ "$3" != "true" ] && [ "$3" != "false" ]
Run Code Online (Sandbox Code Playgroud)
即运行两个[命令,每个命令执行一个测试并与 shell 的&&操作符链接。
[[...]]是来自 ksh 的特殊非标准 shell 语法,受到许多功能丰富的 shell 的支持,并且它(通常)支持&&括号内的内容。bash只要bash不是用 构建的,它就应该可用--disable-cond-command,但错误消息的措辞表明您宁愿使用 shell dash。使用bashwith 构建时--disable-cond-command,错误分别是:Geoserver.sh: 12: [: too many arguments和Kafka.sh: 18: [[: command not found。
-a[为了向后兼容而受到支持,如在 中[ "$2" != "true" -a "$2" != "false" ],但已被弃用并被设计破坏,并且(如或-o的对应项)不应使用。
这很复杂,参见例如
bash这两个错误都表明您根本没有使用,而是使用了一些功能较少的 shell,dash例如。
此外,在第一个示例中,您错误地实现了“and”子句。
我认为这就是你想要的,如果你真的要使用的话,应该可以工作bash:
if [ "$2" != "true" -a "$2" != "false" ]; then
Run Code Online (Sandbox Code Playgroud)
尽管首选方法往往是这种更便携的选项:
if [ "$2" != "true" ] && [ "$2" != "false" ]; then
Run Code Online (Sandbox Code Playgroud)
第二个示例的错误再次表明您没有使用支持[[ ]]表示法的 shell,如果您更改为上述[ ] && [ ]样式表示法,您可能会取得更大的成功。
| 归档时间: |
|
| 查看次数: |
827 次 |
| 最近记录: |