쉘의 간접 확장 변수

쉘의 간접 확장 변수

bash쉘에서 변수를 간접적으로 참조해야 합니다 .

make나는 기본적으로 글쓰기를 통해 무엇을 할 수 있는지 알고 싶습니다 $($(var)).

${$var}가장 간단한 솔루션을 사용해 보았지만 bash다음 오류가 발생합니다.

bash: ${$var}: bad substitution

이를 수행할 수 있는 방법이 있습니까?

내가 하고 싶은 것은 반복 변수를 사용하여 프로그램의 모든 매개변수(,,,,...)를 반복하는 것이지만 간접 참조를 사용하지 않으면 $1그렇게 할 수 없습니다 $2.$3

답변1

var1=fooand 가 있는 경우 이라고 말할 foo=bar수 있습니다 . 그러나 위치 매개변수를 반복하려면 다음을 수행하는 것이 거의 확실합니다.bar${!var1}

for i in "$@"; do
    # something
done

답변2

사용 /bin/bash:

foo=bar
test=foo
echo ${!test}

# prints -> bar

답변3

grep + awk 사용

foo=bar
var_name=foo
set | grep -v var_name | grep ^"${var_name}=" | awk -F= '{ print $2 }'

출력은 다음과 같습니다

bar

이 접근 방식이 작동하는지 확인하려면 bash 스크립트를 확인하세요.

#!/bin/bash

function show_variable_value() {
  name=$1
  value=$(set | grep -v name | grep ^"${name}="  | awk -F= '{ print $2 }' )
  echo "${value}"
}


foo='bar'

# getting the variable value indirectly from the variable name
value=$(show_variable_value foo)
if [ "${value}" == "${foo}" ]; then
  echo "The function returned indirectly the variable value from the variable name >>> '${value}' == '${foo}'"
else
  echo "This approach does not work"
fi

관련 정보