这里我的问题是在if语句中找到使用单括号[]和双括号[[]]的区别.
#!/bin/bash
vara=08;
varb=10;
## single bracket in if statment is working.
if [ $vara -lt $varb ]; then
echo "yes";
else
echo "no";
fi
## double brackets in if statment is not working; throwing an error like below.
## [[: 08: value too great for base (error token is "08")
if [[ $vara -lt $varb ]]; then
echo "yes";
else
echo "no";
fi
Run Code Online (Sandbox Code Playgroud)
Joh*_*hnB 102
shell尝试将08解释为八进制数,因为它以零开头.但是,在八进制中只允许数字0-7,因为十进制8是八进制010.因此08不是有效数字,这就是错误的原因.
单括号是sh的"兼容模式",sh不知道八进制数.
因此,如果使用单个方括号,"010"将被解释为10,而使用双方括号,"010"将被解释为8.
如果使用单个方括号,"08"将被解释为8,而使用双方括号时,它不是有效数字并导致错误.
您可以使用此处描述的解决方案来避免错误:https://stackoverflow.com/a/12821845/1419315
if [[ ${vara#0} -lt ${varb#0} ]]
Run Code Online (Sandbox Code Playgroud)
要么
if [[ $((10#$vara)) -lt $((10#$varb)) ]]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
75084 次 |
最近记录: |