【发布时间】:2021-03-01 23:49:41
【问题描述】:
我有一个非常简单的 bash 脚本,它可以卷曲 URL,计算响应中的子字符串,并在找到字符串时运行一些代码。
原来我是这样写的:
RESP=$(curl -s 'https://theurl.com' | grep -ic substring)
if [ $RESP > 0 ];
do something
else
do something else
fi
这在我的终端提示符下效果很好。
当我将它设置为作为本地用户启动代理在 launchd 中运行时,if 语句从未评估为 true。
我在调试过程中尝试的事情:
- 确保两者都使用 /bin/bash(他们曾经使用过)并像我一样运行。
- 将变量发送到标准输出以进行确认。
- 在没有 curl 的情况下运行它们,只需 grepping 一个本地文件。
最终,我可以通过将 if 更改为:
if [ $RESP -ge 1 ]
这在两个地方都有效,但我不明白为什么完全相同的解释器中的完全相同的脚本会在两个地方进行不同的评估。
有什么想法吗?
【问题讨论】:
-
在
[ $RESP > 0 ];之后,您缺少then。但是,如果没有then,我希望脚本总是会失败。您只是在问题中错过了它吗? -
脚本是否以
#!/bin/bash开头? -
除非您有充分的理由不这样做,否则请始终引用您的变量。
-
使用
sh或bash[ $RESP > 0 ]创建一个名为0的文件。 -
[或[[内部 bash 比较的一般规则:对数字使用“字母”比较-gt,对字符串使用“数字”比较>,与什么相反你会认为...