변수 이름과 그 값을 인쇄하는 방법은 무엇입니까?

변수 이름과 그 값을 인쇄하는 방법은 무엇입니까?

변수 이름과 해당 값을 인쇄할 수 있는 방법이 있습니까?

j=jjj
k=kkk
l=lll

for i in j k l
do
    ....
done

예상 출력(각 변수마다 별도의 줄):

j = jjj 
k = kkk
l = lll

누구든지 위의 결과를 얻을 수 있는 방법을 제안할 수 있습니까?

답변1

Bash의 간단한 방법:

j="jjj"
k="kkk"
l="lll"

for i in j k l; do echo "$i = ${!i}"; done

산출:

j = jjj
k = kkk
l = lll

  • ${!i}- Bash 변수 확장/간접(보유된 변수 이름 값 가져오기 $i)

답변2

Bash v4.4 이상이면 ${VAR@A}매개변수 확산 연산자를 사용할 수 있습니다.

이 문제는 Bash 매뉴얼의 다음 섹션에서 논의됩니다.3.5.3 쉘 매개변수 확장

"A" 연산자

확장은 평가된 경우 매개 변수와 해당 속성 및 값을 다시 생성하는 할당 문 또는 선언 명령 형식의 문자열입니다.

따라서 다음을 수행할 수 있습니다.

j="jjj"
k="kkk"
l="lll"

for i in {j,k,l}; do 
    echo "${!i@A}"
done

결과는 다음과 같습니다.

j='jjj'
k='kkk'
l='lll'

답변3

또는 ksh, zsh또는 를 사용합니다 bash. 보기 유형에 관심이 없는 경우 전역적으로 또는 개별적으로:yashtypeset -pzshtypeset

% j=jjj; k=kkk; l=(l l l)               
% for v in j k l; do typeset -p "$v"; done
typeset j=jjj
typeset k=kkk
typeset -a l=( l l l )

(zsh에만 해당):

% typeset j k l
j=jjj
k=kkk
l=( l l l )

zsh에서 with 변형은 이 플래그가 있는 변수의 값을 -p표시하지 않습니다 ( 일부 특수 매개변수의 경우와 마찬가지로).hidevaltypeset -H

zshm패턴과 일치하는 변수의 정의를 인쇄하는 것도 가능합니다 (함수나 옵션 세트 typeset -m에도 작동합니다 ):typesetsilent

$ typeset -m '[j-l]'
j=jjj
k=kkk
l=( l l l )

답변4

표준 sh구문에서는 다음과 같습니다.

j=jjj
k=kkk
l=lll

for i in j k l
do
    eval 'printf "%s\n" "$i=${'"$i"'}"'
done

즉, 쉘은 확장을 연결하고 쉘 코드로 해석되도록 요청하므로 printf "%s\n" "$i=${예를 들어 다음과 같이 해석됩니다.$i}"i=j

printf "%s\n" "$i=${j}"

이는 및 인수를 사용하여 명령을 eval호출하는 데 사용되었습니다.printf%s\nj=jjj

일부 쉘에서는 중괄호가 필요합니다. i예를 들어 10일부 쉘에서는 where 값이 대신 $10으로 해석됩니다 .${1}0${10}

을 사용하면 출력이 j='foo; bar'표시됩니다 . 쉘 코드 (zsh에서와 마찬가지로 ) i=foo; bar를 사용하여 POSIXly를 사용하여 출력에 동일한 값을 할당하려면 다음을 수행할 수 있습니다.jtypeset -m j

show_var() (
  for _var do
    eval 'set -- "$@" "$_var" "${'"$_var"'}"'
    shift
  done
  LC_ALL=C awk -v q="'" -- '
    function shquote(s) {
      gsub(q, "&\\\\&&", s)
      return q s q
    }
    BEGIN {
      for (i = 1; i < ARGC; i++) print ARGV[i]"="shquote(ARGV[++i])
    }' "$@"
)

그런 다음:

show_var j k l

관련 정보