如何在bash for循环中设置变量?

时间:2010-12-31 15:52:29

标签: bash scripting for-loop

我需要在bash for循环中设置一个变量,由于某种原因,它对我不起作用。这是我的剧本的摘录:

function unlockBoxAll
{
appdir=$(grep -i "CutTheRope.app" /tmp/App_list.tmp)
for lvl in {0..24}
key="UNLOCKED_$box_$lvl"
plutil -key "$key" -value "1" "$appdir/../Library/Preferences/com.chillingo.cuttherope.plist" 2>&1> /dev/null
successCheck=$(plutil -key "$key" "$appdir/../Library/Preferences/com.chillingo.cuttherope.plist")
if [ "$successCheck" -eq "1" ]; then
 echo "Success! "
    else
 echo "Failed: Key is $successCheck "
fi
done
}

正如您所看到的,我尝试使用以下命令写入循环内的变量:

key="UNLOCKED_$box_$lvl"

但是当我这样做时,我明白了:

/usr/bin/cutTheRope.sh: line 23: syntax error near unexpected token `key="UNLOCKED_$box_$lvl"'
/usr/bin/cutTheRope.sh: line 23: `key="UNLOCKED_$box_$lvl"'

我做得不对?还有另一种方法吗?

请帮助,谢谢。

1 个答案:

答案 0 :(得分:3)

使用

for lvl in 1 2 3 4 
do
    key="UNLOCKED_${box}_$lvl"
done
  1. 您错过了围绕循环体的“do”/“done”关键字

  2. $box_$lvl被bash视为名为box_的变量,后跟变量名为lvl的变量。这是因为_是变量名中的有效字符。要将变量名与以下_分开,请使用${varname}语法,如上所示

  3. {0..24}在bash v2(我们的服务器在这里)虽然it works as a range shortcut on modern bash不起作用,所以不应该引起你的问题。