Замена переменной внутри другой переменной в сценарии оболочки без переназначения

Команда time вызовет эхо команды. В zsh это встроено в оболочку, поэтому внешний двоичный файл не запускается. В bash команда echo запустит бинарный файл echo, расположенный в /bin/echo.

Таким образом, в zsh встроено эхо, bash создаст процесс из двоичного файла эха.

1
24.10.2019, 18:17
1 ответ

Когда вы вставляете значение new value is ${abc}, часть ${abc}представляет собой просто строку символов. Эта строка не переоценивается для раскрытия, когда вы выполняете xyz=$@.

Чтобы расширить ${abc}в строке, выполните следующие действия в скрипте:

abc="something='123:234'"

eval "xyz=\"$1\""

printf '%s\n' "$xyz"

evalпринимает фрагмент шелл-кода. Данный код выполняет xyz="$1", но с заменой $1аргументом командной строки (на строкуnew value is ${abc}). Этот оператор затем переоценивается оболочкой, присваивая корректную строку переменной.

2
27.01.2020, 23:58

Теги

Похожие вопросы