$(pwd) 또는 $PWD를 사용하는 것이 더 낫습니까?

$(pwd) 또는 $PWD를 사용하는 것이 더 낫습니까?

나는 BASEDIR=$(pwd)이것을 대본에서 발견했습니다.

재정의 가능성 외에도 BASEDIR="$PWD"사용에 비해 장점이나 단점이 있나요?$PWD

답변1

Bash가 이를 발견하면 $(pwd)pwd 명령을 실행하고 $(pwd)해당 명령의 출력을 대체합니다. $PWD거의 항상 설정되는 변수입니다. pwd는 오랫동안 내장된 쉘 명령이었습니다.

따라서 $PWD이 변수가 설정되지 않으면 실패할 것이고, $(pwd)사용 중인 셸이 이 $()구성을 지원하지 않으면 실패할 것입니다. 이는 제 경험상 매우 흔한 현상입니다. 그래서 나는 $PWD.

모든 괴상한 사람들처럼 나도쉘 스크립팅 튜토리얼

답변2

$PWD성능면에서 이상적 이라는 점도 언급해야합니다 . 쉘 변수로서 거의 즉시 해결됩니다. $(pwd)조금 혼란 스럽습니다. Bash를 사용하여 시스템을 확인해 보면 man 1 bulitin이것이 내장된 명령이라는 것을 알 수 있으며 pwd, 이는 변수에 액세스하는 것만큼 빠르다고 믿을 수 있습니다. 그러나 이 $()구성은 내부 내용에 관계없이 해당 콘텐츠를 실행하기 위해 항상 새로운 하위 셸(새 프로세스)을 시작합니다. 백틱도 마찬가지입니다. 실제로 제가 벤치마킹했을 때:

echo 'Benchmarking $(pwd)...'
time (for i in {1..1000}; do echo $(pwd) > /dev/null; done)
echo 'Benchmarking $PWD...'
time (for i in {1..1000}; do echo $PWD > /dev/null; done)

내 통화 시간은 1.52초 $(pwd), .018초 입니다 $PWD. 불필요한 서브셸 및 기타 관련 없는 프로세스의 실행은 가능하면 피해야 합니다. 이는 다른 언어에서 익숙할 수 있는 함수 호출보다 훨씬 비쌉니다.

관련 정보