2015-06-09 31 views
1

我正在開始使用bash編程,並且在語法上有點磕磕絆絆。以下是從命令行播放井字棋的部分代碼。不良替換:在bash中使用數組元素進行字符串比較

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

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]}"

+0

哦~~好,謝謝! –

2

空格不是可選的。您需要使用:

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