gpt4 book ai didi

bash - 错误 : =: command not found (Bash Script)

转载 作者:行者123 更新时间:2023-11-29 09:16:05 36 4
gpt4 key购买 nike

我从 this website here. 找到了一个我想使用的漂亮的小 shell 脚本我已按部就类地执行所有操作,但在我的 CentOS 机器上运行时收到以下错误。

./deploy: line 3: =: command not found

第 3 行仅包含...

$ERRORSTRING = "Error. Please make sure you've indicated correct parameters"

我试过玩弄一下,但不明白为什么它不接受“=”字符。脚本是否有问题,或者仅仅是我的服务器处理脚本的方式有所不同?

谢谢!

最佳答案

啊,那个脚本充满了糟糕的脚本编写实践(除了您遇到的完全错误之外)。这是彻底的错误:

$ERRORSTRING = "Error. Please make sure you've indicated correct parameters"

正如 devnull 所指出的,这应该是:

ERRORSTRING="Error. Please make sure you've indicated correct parameters"

往下几行(又是接近尾声),我们有:

echo $ERRORSTRING;

...这有效,但包含两个糟糕的想法:一个没有双引号的变量引用(有时会以意想不到的方式解析),以及在末尾的分号行(这是有人试图在 shell 脚本中编写 C 或 Java 或其他内容的标志)。改用这个:

echo "$ERRORSTRING"

下一行是:

elif [ $1 == "live" ]

...哪个可能起作用,取决于 $1 的值是否有空格,或者定义为空白,或类似的东西(再次,使用双引号以防止错误解析!)。此外,== 比较运算符是非标准的——它会起作用,因为 bash 在其 [ ... ] 内置语法中支持它,但是如果您指望有可用的 bash 扩展,为什么不使用更简洁的 [[ ... ]] 替换?这些中的任何一个都可以更好地替代该行:

elif [ "$1" = "live" ]
elif [[ $1 == "live" ]]
elif [[ "$1" == "live" ]]

就我个人而言,我更喜欢最后一种。在这种特殊情况下不需要双引号,但 IMO 最安全的做法是对所有变量引用进行双引号,除非有特定原因不这样做。再往下一点,有一个 elif [ $2 == "go"],同样的注释适用于它。

顺便说一句,www.shellcheck.net 上有一个很好的 shell 脚本健全性检查工具。 .它不像我那么挑剔(例如,它不会在行尾标记分号),但它指出了该脚本中的所有实际错误...

关于bash - 错误 : =: command not found (Bash Script),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23065722/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com