![Bash의 별칭 변수](https://linux55.com/image/91138/Bash%EC%9D%98%20%EB%B3%84%EC%B9%AD%20%EB%B3%80%EC%88%98.png)
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.
편집하다:죄송합니다. 변수를 명령으로 실행할 수 없다고 잘못 말씀드렸습니다.
변수가 명령 자체인 경우 실행할 수 있지만 해당 값이 별칭으로 사용되는 경우에는 실행할 수 없습니다. 이 경우 별칭을 설정한 것처럼 별칭 값은 단독으로 작동합니다.
그러나 별칭은 변수에서 전달할 수 없습니다.