변수 이름과 값을 인쇄 할 수있는 방법이 있습니까?
j=jjj k=kkk l=lll for i in j k l do .... done
예상 출력 (각 변수는 별도의 줄에 있음) :
j = jjj k = kkk l = lll
누군가 위의 결과를 얻는 방법을 제안 할 수 있습니까?
댓글
- 관련 : unix.stackexchange.com/questions/129084/ …
답변
간단한 방법 :
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
참조 :