gpt4 book ai didi

bash 外壳 : What is the differences in syntax?

转载 作者:行者123 更新时间:2023-11-29 09:28:33 35 4
gpt4 key购买 nike

我在教程中看到了两种在 BASH shell 中对 if 语句进行语法处理的方法:

除非我在变量周围加上引号并添加额外的 [ 和 ],否则这个不会工作:

if [[ "$step" -eq 0 ]]

这个工作没有在变量周围加上引号并且不需要额外的 [ 和 ]:

if [ $step -ge 1 ] && [ $step -le 52 ]

哪个是正确的最佳实践?有什么区别?谢谢!

最佳答案

“引用变量时,通常建议将其名称用双引号引起来” -- http://tldp.org/LDP/abs/html/quotingvar.html

if [ $step -ge 1 ] && [ $step -le 52 ] 可以替换为

if [ "$step"-ge 1 -a "$step"-le 52 ]

if [[ "$step"-eq 0 ]] 可以替换为 if [ "$step"-eq 0 ]

此外,假设您有以下脚本:

#!/bin/bash
if [ $x -eq 0 ]
then
echo "hello"
fi

运行脚本时出现此错误 -- example.sh: line 2: [: -eq: unary operator expected

但是使用 if [ "$x"-eq 0 ]

运行脚本时出现不同的错误 -- example.sh: line 2: [::integer expression expected

因此,最好将变量放在引号内......

if [[ .... ]] 语法在条件语句中有 regex 时特别有用 -- http://honglus.blogspot.com/2010/03/regular-expression-in-condition.html

编辑:当我们处理字符串时——

#!/bin/bash
if [ $x = "name" ]
then
echo "hello"
fi

运行脚本时出现此错误 -- example.sh: line 2: [: =: unary operator expected

但是,如果您使用 if [ "$x"= "name"] 它运行良好(即没有错误)并且 if 语句被评估为 false,因为 x 的值为 null,与 name 不匹配。

关于 bash 外壳 : What is the differences in syntax?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16511720/

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