我开始使用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
但是,即使我相信它显然应该
,回声也永远不会被执行答案 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]}"