shell脚本,如果无论如何都会执行

标签 sh

为什么在这个脚本中

#!/bin/sh

if [ $1='all' ];
then
    echo $1
    echo "all"
fi

无论如何都打印了???

例如,我这样做:./thescript.sh 并且我清楚发现$1是空的。但仍然全部打印出来。为什么?当全部通过时如何打印“全部”

最佳答案

shellcheck有解决办法:

SC2077: You need spaces around the comparison operator.

更改为

if [ $1 = 'all' ];

如果没有空格,[] 之间的内容将被视为一个表达式,man [ 表示

"STRING equivalent to -n STRING

因此任何非空字符串都被视为true。 (即 if [ ""]; 将为 false。)

也就是说,您最好在 shebang 中指定您想要的 shell。在某些系统上,/bin/sh 可能是 bash,在其他系统上,/bin/dash 或其他内容。选择您的 shell,避免因错误假设您实际获得的 shell 而出现任何问题。

关于shell脚本,如果无论如何都会执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70254232/

相关文章:

linux - Bash - 使用双方括号和单方括号时

bash - 如何检查数字是否在shell中的范围内

bash - 为什么要测试 "$?"以查看命令是否成功,这是一种反模式?

linux - 如何自动调用每天创建的文件名中带有日期戳的文件

linux - 在 Docker 容器中的 cron 中执行服务时出现问题?

linux - 如何将以下日期更改为 2 个特定表格? (Linux 终端/shell )

python - 将 py 和 sh 代码合并到一个文件中

bash - 如何在 unix 终端模拟器中使用脚本命令?

php - 如何在php中执行脚本

linux - 如何在 bash 中确定/mountpoint 是否是从其他操作系统挂载的?