몇 가지 알리스를 읽은 후 시도해 보고 싶었지만 제대로 작동하지 못했습니다. 이 별칭이 작동하지 않는 이유는 무엇입니까?
$ printenv PWD
/home/vm
$ alias testpwd="$PWD"
$ testpwd
-bash: /home/vm: Is a directory
하지만 echo를 사용하여 이 작업을 수행하면 실제로 작동합니까?
$ alias testpwd="echo $PWD"
$ testpwd
/home/vm
왜 첫 번째 테스트가 성공하지 못했는지 이해가 안 가나요?
답변1
두 예제 모두 지시한 대로 수행되므로 잘 작동합니다. 이 alias
명령은 정의의 나머지 부분을 나타내는 단어를 정의합니다.
alias testpwd="echo $PWD"
testpwd
명령의 첫 번째 단어 로 사용되는 경우 해당 단어를 echo $PWD
. 그러나 명령 확장을 큰따옴표로 묶었으므로 $PWD
명령이 실행될 때 값이 평가됩니다.정의. 따라서 이 경우 echo /home/vm
실행할 때 testpwd
마다 /home/vm
.현재의의 가치 $PWD
. (평소처럼 "큰 따옴표" 대신 "작은 따옴표"를 사용하면 쉘이 변수를 즉시 평가하는 것을 방지할 수 있습니다.)
첫 번째 예는 동일한 방식으로 작동합니다. 이 정의는 다음을 testpwd
의미합니다 "$PWD"
.
alias testpwd="$PWD"
이제 실행하면 testpwd
별칭이 정의되었을 때의 현재 값, 즉 으로 대체된다는 것을 (이전과 마찬가지로) 고려할 수 "$PWD"
있습니다 /home/vm
. 이는 현재 디렉터리를 명령으로 실행하려고 시도하지만 크게 실패합니다.
-bash: /home/vm: Is a directory