Korn Shell에서 이름을 고려하여 변수의 값을 어떻게 얻을 수 있습니까?

StackOverflow https://stackoverflow.com/questions/870860

  •  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".
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top