Korn Shell에서 이름을 고려하여 변수의 값을 어떻게 얻을 수 있습니까?
-
22-08-2019 - |
문제
변수의 이름을 받았을 때 KSH에 변수의 값을 얻는 방법이 있습니까?
예를 들어:
#!/usr/bin/ksh
var_name=$1 #pretend here that the user passed the string "PATH"
echo ${$var_name} #echo value of $PATH -- what do I do here?
해결책
var_name=$1 #pretend here that the user passed the string "PATH"
printenv $var_name
다른 팁
eval `echo '$'$var_name`
echo는 $ var_name 내부의 변수 이름에 '$'를 연결하고, 평가는이를 평가하여 값을 보여줍니다.
편집 : 위는 옳지 않습니다. 정답은 백틱이없는 것입니다.
eval echo '$'$var_name
printenv
KSH 내장이 아니며 항상 존재하지 않을 수도 있습니다. 이전 KSH 버전의 경우 KSH93, 평가 '표현'방법이 가장 잘 작동합니다.
KSH93의 강력한 방법은 'nameref'또는 'typeset -n'과 함께 간접 변수를 사용하는 것입니다.
정의하고 확인하십시오 Nameref 참조하는 변수 $PATH
:
$ nameref indirect=PATH
$ print $indirect
/usr/bin:/usr/sbin
어떻게 Nameref 변경하면 변수가 변경됩니다 PATH
:
$ PATH=/usr/bin:/usr/sbin:/usr/local/bin
$ print $indirect
/usr/bin:/usr/sbin:/usr/local/bin
KSH 버전과 별명을 보여주십시오 nameref
:
$ type nameref
nameref is an alias for 'typeset -n'
$ echo ${.sh.version}
Version JM 93t+ 2010-02-02
당신의 대답보다 한 단계 동안 (나는이 답변을 모두 찾는 데 많은 시간을 보냈습니다). 아래는 동적 변수를 내보낸 다음 동적으로 기억할 수 있습니다.
echo -n "Please provide short name for path:"
read PATH_SHORTCUT
echo -n "Please provide path:"
read PATH
eval export \${PATH_SHORTCUT}_PATH="${PATH}"
eval echo Path shortcut: ${PATH_SHORTCUT} set to \$"${PATH_SHORTCUT}_PATH".
제휴하지 않습니다 StackOverflow