Косвенная ссылка на переменную ASH - PullRequest
1 голос
/ 18 июня 2009

Я пытаюсь перенести скрипт из BASH в ASH (Almquist SHell) и столкнулся с проблемой с косвенными ссылками. Следующая функция

cmd() {
    # first argument is the index to print (ie label)
    arg=$1
    # ditch the first argument
    shift
    # print the label (via indirect reference)
    echo "${!arg}"
}

должен выдать следующий результат

cmd 1 one two three
one
cmd 2 one two three
two
cmd 3 one two three
three

Это работает, как и ожидалось, в BASH, но генерирует «синтаксическую ошибку: неправильная замена» при запуске в режиме ASH (или DASH). Должно ли это работать? Если нет, есть ли альтернатива использованию косвенных ссылок?

1 Ответ

2 голосов
/ 18 июня 2009

Вы можете попробовать eval:

cmd() {
    arg=$1
    shift
    eval "echo \$$arg"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...