Как установить переменную внутри цикла bash for? - PullRequest
0 голосов
/ 31 декабря 2010

Мне нужно установить переменную внутри цикла 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
}

Как видите, я пытаюсь записать в переменную внутри цикла:получить это:

/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 Ответ

3 голосов
/ 31 декабря 2010

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

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

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

  3. {0..24} не работает в bash v2 (который есть здесь у наших серверов), хотя он работает как ярлык диапазона на современном bash , поэтому не должен вызывать проблем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...