"압축해제"에 필요한 와일드카드가 포함된 텍스트와 변수의 조합을 에코하려고 하는데 다음 동작이 발생합니다.
내가 말하면:
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로 전달되어 즉시 표준 출력에 기록됩니다.