에코 와일드카드 와일드카드

에코 와일드카드 와일드카드

"압축해제"에 필요한 와일드카드가 포함된 텍스트와 변수의 조합을 에코하려고 하는데 다음 동작이 발생합니다.

내가 말하면:

FILENAME=somefile*.txt
echo "something:" $FILENAME

나는 얻다:

something: somefile003.txt

이것이 내가 원하는 것이지만 내가 말한다면: 내가 말한다면:

FILENAME=somefile*.txt
echo "something:"$FILENAME

나는 얻다:

something:somefile*.txt

따라서 인용문과 변수 사이에 공백이 없으면 와일드카드를 사용하지 않는 것 같습니다. 공백을 추가하지 않고 *를 처리할 수 있는 방법이 있나요?

답변1

예를 들어 배열을 처리하는 셸을 사용하면 bash배열에 와일드카드를 사용할 수 있습니다.

FILENAMES=(somefile*.txt)

다음과 같이 첫 번째 요소를 참조하십시오.

echo "something:${FILENAMES[0]}"

아니면 다들 이런거 아닐까

echo "somethings:${FILENAMES[@]}"

변수를 사용할 때는 변수를 "큰따옴표"로 사용하는 것이 좋습니다. 이렇게 하면 실수로 여러 단어로 확장되는 것을 방지할 수 있습니다.

답변2

다음과 같이 변수를 정의해 보세요.

FILENAME=\ somefile*.txt; # that is, with a leading space ... and then
echo "something:"$FILENAME; 

그러면 변수가 다음과 같이 보간됩니다: somefile*.txt

그런 다음 와일드카드는 다음으로 확장됩니다. somefile003.txt

그런 다음 이 두 인수는 echo로 전달되어 즉시 표준 출력에 기록됩니다.

관련 정보