比较包含多个空格分隔值的变量中的每个值

比较包含多个空格分隔值的变量中的每个值

正常情况

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
$ 

相关内容