Bash의 별칭 변수

Bash의 별칭 변수

Bash 스크립트에서 이상한 동작을 발견했습니다.

#!/bin/bash
V=a
alias $V="echo test"
echo $(a)                 #returns 'test'
echo $($V)                #returns ...'a: not found'

변수를 사용하여 이전 동작을 시뮬레이션할 수 있는 방법이 있습니까?

답변1

별칭은 명령이 확장 없이 코드에 직접 나타나는 경우에만 확장됩니다. \a, 등 $V을 쓰면 $(echo a)별칭 조회가 억제됩니다.

또한 bash(다른 쉘과 달리)는 기본적으로 스크립트의 별칭을 확장하지 않으므로 a실제로는 다음과 같습니다.아니요Bash에서 별칭을 실행합니다.

별칭 대신 함수를 사용하세요. 함수를 정의하려면 원래 이름을 사용해야 합니다.

V=a
a () { echo test; }
"$V"     # prints test

( 를 사용하여 원하는 것을 달성하는 다른 방법이 있지만 eval수행 중인 작업을 정확히 알지 않는 한 사용하지 마십시오 eval. 올바른 인용이 eval까다롭습니다.)

답변2

네가 말했듯이:

#!/bin/bash
V=a
alias $V="echo test"
echo `a`              #echo the out put of the 'echo test' command which is test 
echo `$V`             #echo the output of $V 'command' which is holding a value itself and it won't be executed as an alias since it's not used directly.

편집하다:죄송합니다. 변수를 명령으로 실행할 수 없다고 잘못 말씀드렸습니다.

변수가 명령 자체인 경우 실행할 수 있지만 해당 값이 별칭으로 사용되는 경우에는 실행할 수 없습니다. 이 경우 별칭을 설정한 것처럼 별칭 값은 단독으로 작동합니다.
그러나 별칭은 변수에서 전달할 수 없습니다.

관련 정보