这是我从一本书(The Linux Command Line)中得到的脚本
#!/bin/bash
# trouble: script to demonstrate common errors
number=1
if [ $number = 1 ]; then
echo "Number is equal to 1."
else
echo "Number is not equal to 1."
fi
我对这个表达感到困惑:
$number = 1
在 [ 命令中,= 运算符用于比较字符串,对吗?或者那里发生了什么?
字符串是用引号还是不带引号来标识的?
答案1
[ $number = 1 ]
字符串比较和数字比较之间的区别[ $number -eq 1 ]
在于,根据上下文,相等的含义有所不同。例如:
number="1"
if [ $number -eq 01 ]; then
echo "true"
else
echo "false"
fi
上面的代码将回显,true
因为01
在数值上等于1
, while ,此代码块:
number="1"
if [ $number = 01 ]; then
echo "true"
else
echo "false"
fi
会回显,false
因为该字符串01
与 string 不同1
。
答案2
有关条件运算符的文档,您需要参考
- Bash 条件表达式
- 这
test
命令 (又名[ ... ]
) - 和
[[ ... ]]
条件结构