Bash 별칭이 예상대로 작동하지 않습니다.

Bash 별칭이 예상대로 작동하지 않습니다.

몇 가지 알리스를 읽은 후 시도해 보고 싶었지만 제대로 작동하지 못했습니다. 이 별칭이 작동하지 않는 이유는 무엇입니까?

$ 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

관련 정보