Bash의 변수 및 경로 이름 확장 순서에 대해

Bash의 변수 및 경로 이름 확장 순서에 대해

Bash는 경로 이름(와일드카드)을 확장하기 전에 변수를 확장합니다. 반대 방향으로 진행한다고 가정하면(즉, 변수를 확장하기 전에 경로 이름을 확장하는 경우) 확장 순서에 관계없이 결과가 동일하도록 변수 확장과 경로 확장을 모두 사용하는 bash 스크립트를 작성할 수 있습니까?

나는 다음과 같은 간단한 bash 스크립트를 생각해 냈습니다.

#!/bin/bash

# Create a variable called myvar1
myvar1=~
echo $myvar1

# Use both path expansion and variable expansion with the ls command
# Assuming the variable was expanded first, the out should be the same as if the path was expanded first. Is my assumption correct?
ls $myvar1/*.txt  

내 스크립트가 질문에 만족스럽게 대답하는지 확인할 수 있나요?

답변1

ls $myvar1/*.txt 

*.txt$myvar1경로 이름이 변수 앞에 확장되면 일치하는 파일 이름이 없을 수도 있는 디렉터리에서 검색됩니다 . 그 후에는 먼저 경로를 확장한 다음 홈 디렉터리에서 끝나는 파일 이름을 찾는 것과는 달리 홈 디렉터리 $myvar1경로로 확장됩니다 ./home/username/*.txt.txt

일반적으로 파일 이름에는 $기호가 포함될 수 있으므로 확장 순서가 항상 중요하다고 생각합니다. .*$PATH

반면 전역 문자가 포함된 변수는 변수 값을 제어할 수 있으므로 해결하기가 더 쉽습니다.

관련 정보