Параметр AddKeysToAgent
делает то, что я хочу. Я могу указать -o AddKeysToAgent = yes
в командной строке или добавить AddKeysToAgent yes
в отдельную строку в моем .ssh / config
. Либо работает.
Похоже, это совсем недавнее дополнение к openssh, появившееся в выпуске 7.2 от 28.02.2016!
http://www.openssh.com/txt/release-7.2
Спасибо, OpenBSD! Я буду использовать этот лот .
printf '%s\n' "${(P)$(echo "_v2_$_v1")}"
альтернативно
var=_v2_$_v1
printf '%s\n' "${(P)var}"
В обоих случаях флаг расширения параметра (P)
используется для расширения имени внутри ${...}
до имени фактической переменной, значение которой мы хотим получить.
Это аналогично переменной косвенности с ${!...}
в оболочке bash
.
Сzsh
:
${(P)varname}
расширяется до значения переменной, имя которой хранится в $varname
. Итак, если $varname
содержит var
, ${(P)varname}
расширяется до того же, что и $var
. ${(e)var}
расширяется до содержимого $var
, но также выполняет расширение параметров, подстановку команд и арифметическое расширение внутри. Итак, если $var
содержит $othervar
, ${(e)var}
расширяется до того же, что и $othervar
. ${(P)${var:-something}}
работали ${:-content}
— это один из способов расширить расширение параметра до произвольного текста (здесьcontent
)(подробнее см. в руководстве )
Так что можно было:
_v1=windows
_v2_windows=/mnt/d
printf '%s\n' ${(P)${:-_v2_$_v1}}
Или:
printf '%s\n' ${(e)${:-\$_v2_$_v1}}
Или сделать это в два этапа:
varname=_v2_$_v1
printf '%s\n' ${(P)varname}
Или:
expansions_to_evaluate=\$_v2_$_v1
printf '%s\n' ${(e)expansions_to_evaluate}
Или вы можете использовать стандартный синтаксис POSIX:
eval 'printf "%s\n" "${_v2_'"$_v1"'}"'
Имейте в виду, что если значение $_v1
не находится под вашим контролем, все это представляет собой уязвимость, связанную с внедрением произвольных команд, вам необходимо сначала очистить значение.
Также обратите внимание, что zsh
поддерживает ассоциативные массивы (и задолго до bash
), так что вы можете сделать:
typeset -A mnt
mnt=(
windows /mnt/d
osx /Volumes/d
)
os=windows
printf '%s\n' $mnt[$os]
Это было бы намного более разборчиво и не имело бы никаких последствий для безопасности.