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

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

j=jjj k=kkk l=lll for i in j k l do .... done 

예상 출력 (각 변수는 별도의 줄에 있음) :

j = jjj k = kkk l = lll 

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

댓글

답변

간단한 방법 :

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에서 보유한 변수 이름의 값 가져 오기)

댓글

  • {j..l}를 사용하여 {j,k,l}를 짧게 만들 수도 있습니다.)
  • @ αғsнιη, ' 3 개만있는 한 확장 범위에 적합합니다. ems-{j,k,l}면 충분합니다.
  • j k l면 충분합니다.

Answer

bash v4.4 이상이있는 경우 ${VAR@A} 매개 변수 확장 연산자를 사용할 수 있습니다.

이것은 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" 

답변

또는 zsh에서 declare -p

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

댓글

사용 h3>

  • Bash에서도 작동

Answer

${!i}는 더 깨끗하고 빠른 솔루션이지만 완전성을 위해 간접적 인 참조는 다음 예에서도 얻을 수 있습니다.

 foo=bar bar=baz $ echo $foo bar $ eval echo \$${foo} baz 

따라서 :

 j="jjj" k="kkk" l="lll" for i in {j,k,l}; do echo "$i = `eval echo \\$${i}`" done 

제공 :

 j = jjj k = kkk l = lll 

참조 :

간접 참조

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다