BAD SUBSTITUTION:使用bash中的数组元素进行字符串比较

时间:2015-06-09 20:48:16

标签: bash

我开始使用bash编程,而且我对语法有点磕磕绊绊。以下是从命令行播放tic-tac-toe的代码的一部分。

i=0
initialGrid=('_' '_' '_' '_' '_' '_' '_' '_' '_')
if [ "${ initialGrid[ $i ] }" = "_" ]; then
echo "I'm here"
fi

但是我收到以下错误

tic.sh: line 48: ${ initialGrid[ $i ] }: bad substituion

所以回声永远不会被执行

我能够替换上面的if语句并执行以下操作而不会出现错误

element=" $initialGrid[$i] "
if [ "${!element}" = "_" ]; then
echo "Element equals underscore"
fi

但是,即使我相信它显然应该

,回声也永远不会被执行

2 个答案:

答案 0 :(得分:2)

空格不是可选的。你需要使用:

if [[ "${initialGrid[i]}" == "_" ]]; then echo "I'm here"; fi

答案 1 :(得分:0)

bash中的空格几乎总是特殊字符。在你的第一个案例中:

i=0
initialGrid=('_' '_' '_' '_' '_' '_' '_' '_' '_')
if [ "${ initialGrid[ $i ] }" = "_" ]; then
  echo "I'm here"
fi

您需要使用

替换条件
if [ "${initialGrid[$i]}" = "_" ]; then

在第二种情况下,您使用空格填充值,但随后尝试将其与不带空格的值进行比较,__不同。您也没有正确解除引用数组。

element=" $initialGrid[$i] "
if [ "${!element}" = "_" ]; then
  echo "Element equals underscore"
fi

将第一行替换为element="${initialGrid[$i]}"