2010-12-31 6 views
0

Мне нужно установить переменную внутри цикла bash for, которая по какой-то причине не работает для меня. Вот отрывок из моего сценария:Как установить переменную внутри цикла bash?

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"' 

Что я не делаю правильно? Есть ли другой способ сделать это?

Пожалуйста, помогите, спасибо.

ответ

3

Использование

for lvl in 1 2 3 4 
do 
    key="UNLOCKED_${box}_$lvl" 
done 
  1. Вы пропали без вести «делать»/«сделали» ключевые слова обтекание тела цикла

  2. $box_$lvl лечится Баш как переменная с именем box_ с последующим переменная с именем lvl. Это связано с тем, что _ является допустимым символом в имени переменной. Для того, чтобы отделить имя переменной от следующих _ используйте ${varname} синтаксис, как показано выше

  3. {0..24} не работает в Баш v2 (которые наши серверы имеют здесь), хотя it works as a range shortcut on modern bash так что не должно вызывать youproblems.

+0

Doh! Я такой тупой! Lol: P Спасибо вам большое! –

Смежные вопросы