bash에서 변수 값이 아닌 변수 이름을 에코하는 방법은 무엇입니까? [닫은]


18

varbash에 변수가 있다고 가정하십시오 . 값을 할당 할 수 있습니다. 예를 들어 문자열로 만들겠습니다.

var="Test"

의 가치가 아닌 echo의 이름을 원합니다 . (나는 후자를 할 수 있지만 실제로는 전자를하고 싶습니다.)varvarecho $var

SO 의이 질문에 대한 대답 은을 사용한다고 말하지만 echo ${!var}그렇게하면 에코가 빈 줄을 반환합니다. 예를 들어,이 bash 스크립트

#!/bin/bash

echo "Hi"
var="Test"
echo ${!var}
echo "Bye"

이 출력을 반환합니다.

Hi

Bye

var 대신 HiBye 사이에 빈 줄이 있습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

Ubuntu 10.04.4 에서 bash 4.1.5 (1) 을 실행 중 입니다.


11
어 ... 그냥 echo var?
Braiam

5
나는 이것의 요점을 정말로 이해하지 못한다. @Braiam이 지적했듯이 변수 이름을 처음부터 정의하기 때문에 항상 변수를 알고 항상 인쇄 할 수 있습니다. 실제로 무엇을하려고합니까?
terdon

3
SO 솔루션의 드리프트를 놓친 것 같습니다. 시도var=Test; Test=SO; echo ${!var}
iruvar

나는 그것을 얻지 못하지만 당신이하려는 것은 무엇입니까? 에코 '$ var에'
르낭 비센테

정말 궁금합니다. 무엇을 원했는지 알려주세요!
bubakazouba

답변:


22

쉘 매개 변수 확장 $ {! 이름 @} 또는 $ {! 이름 *} 트릭을 할 수있는,

$ foo=bar
$ var_name=(${!foo@})
$ echo $var_name" = "$foo
foo = bar

가능하지만 나는 이것의 유용성을 상상할 수 없다 ...


2
경우 참고 foo정의되지 않지만 foobar, 당신은 얻을 것이다 foobar. 다른 대안 : var_name=${-+foo}(나 ${foo+foo}) var_name=$'foo', var_name=$"foo":-)
스테판 Chazelas가

1
foo와 foobar라는 두 변수가 정의 ${!foo@}되어 있으면 표현식 은로 평가됩니다 foo foobar. 대답에서 알 수 있듯이 그 유용성은 상상하기 어렵습니다.
CppNoob

30

정적 변수 이름 만 출력하려는 ​​경우 $-sign을 이스케이프 할 수 있습니다 .

echo \$var

3
이것이 허용되는 솔루션이어야합니다.
David Poxon

9
아냐! 이 답변은 좋은 해결책이 아닙니다. 이것은 단순히 출력 $var하지만 변수 이름이 동적이면 쓸모가 없습니다. 예를 들어,로 시작하는 환경 변수 세트를 필터링해야 PREFIX_하지만 세트의 크기 나 변수 이름에 대해서는 모른다고 가정 해 봅시다 . 허용 된 솔루션이이 시나리오에 더 적합합니다.
Héctor Valverde Pareja

일명 var_name = "$ (echo \ $ var)"
Yordan Georgiev
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.