1
77
如果你用的是外壳
简单的
替代和
其中第一个参数将生成自第一个参数到
您的案例解释如下:
它可能
似乎
有点多余,因为它有引号和“x”,但它也会处理一个变量,其中包含空格,而不会给出
二
的参数
另一个原因(空变量除外)与选项处理有关。如果你写:
和
记住这取决于外壳。一些贝壳(
|
2
19
其他人没有提到的另一个原因与期权处理有关。如果你写:
$1的值为“-n”,test命令的语法不明确;不清楚您在测试什么。前面的“X”防止前面的破折号引起故障。
你必须看看真正古老的贝壳才能找到一个测试命令不支持的地方
正如其他一些人指出的那样,不要在值周围使用双引号是危险的。事实上,如果文件名可能包含空格(MacOS X和Windows在某种程度上都鼓励这样做,而且Unix一直支持它,尽管类似于
|
3
10
我知道本公约有两个原因: http://tldp.org/LDP/abs/html/comparison-ops.html
其次,在bash之外的其他shell中,尤其是较旧的shell中,不存在用于测试空变量的“-z”这样的测试条件,因此,尽管这样做:
在bash中可以很好地工作,如果您的目标是跨各种Unix环境的可移植性,在这些环境中,您不能确定默认shell是否为bash,以及它是否支持-z测试条件,那么如果[“x$some_var”=“x”]始终具有预期的效果,那么使用表单更安全。从本质上讲,这是一个寻找空变量的旧shell脚本技巧,尽管有更干净的方法可用,但它仍然用于向后兼容性。 |
4
4
我建议改为:
因为它消除了丑陋
|
5
2
我相信是因为
以及
和
然而,这通常是可行的
但是当它在其他地方抱怨输出时,我想很难说出它在抱怨什么,所以
也可以,但更容易调试。 |
6
1
在DOS中,当shell变量可能未定义时,我会这样做。 |
7
1
如果不执行“x$shell_var”操作,那么如果未定义$shell_var,则会得到一个关于“=”的错误,它不是一元运算符或类似的运算符。 |
lonix · 使用sed从JSON中提取非贪婪正则表达式 1 年前 |
g00dds · 如何在bash中从文件中的每一行解码base64? 2 年前 |
Paul · Bash wait命令忽略指定的进程ID 2 年前 |
RafaÅ G. · 如何使用从文件读取的多行参数运行ssh? 2 年前 |
Priya · 在shell脚本中多次运行python脚本 2 年前 |