正常情况
wolf@linux:~$ x='10'
wolf@linux:~$ if [[ "$x" -eq 10 ]]; then echo True; else echo False; fi
True
wolf@linux:~$
我的问题是,假设有 2 个y
这样的值
wolf@linux:~$ y=' 10
> 10'
wolf@linux:~$
如何验证 in 中的数字是否y
等于10
?
wolf@linux:~$ if [[ "$y" -eq 10 ]]; then echo True; else echo False; fi
bash: [[: 10
10: syntax error in expression (error token is "10")
False
wolf@linux:~$
这可能吗?如果不是,正确的做法是什么?
p/s - 抱歉,不太确定这个问题的正确标题是什么。稍后会更改(或者如果您认为有必要请更改)
x='10'
y=' 10
10'
if [[ "$x" -eq 10 ]]; then echo True; else echo False; fi
if [[ "$y" -eq 10 ]]; then echo True; else echo False; fi
答案1
这两个值实际上是不同的。y
不等于10
.
x='10'
y=' 10
10'
这就是你的输出中出现 False 的原因。回显这两个变量以查看它们的实际值。
$ echo $y
10 10
$ echo "$y"
10
10
$
如果你想让它为 True,请尝试 alecxs 共享的代码。
for var in $y; do [ "$var" = 10 ] && echo "y=$var true" || echo "y=$var false"; done
样本输出
$ for var in $y; do [ "$var" = 10 ] && echo "y=$var true" || echo "y=$var false"; done
y=10 true
y=10 true
$
或者,您也可以这样做,将其保存到文件中,或直接从终端运行
for var in $y; do
if [[ "$var" = 10 ]]; then
echo "y=$var True"
else
echo "y=$var False"
fi
done
样本输出
$ for var in $y; do
> if [[ "$var" = 10 ]]; then
> echo "y=$var True"
> else
> echo "y=$var False"
> fi
> done
y=10 True
y=10 True
$