개별 디렉터리/파일과 일치하는 와일드카드 확장

개별 디렉터리/파일과 일치하는 와일드카드 확장

이것은 BASH에서 잘 작동합니다.

$ where=/sys/class/backlight/*
$ echo $where
/sys/class/backlight/intel_backlight

그러나 POSIX 스크립트를 인터프리터로 넣으면 /bin/sh작동하지 않고 where가 됩니다 /sys/class/backlight/*.

Google을 사용해 보았지만 올바른 용어를 사용하지 않았을 수도 있습니다.

답변1

변수의 값은 where항상 문자열입니다 /sys/class/backlight/*. 일반적으로 말해서, 스칼라 할당의 오른쪽과 같이 구문에 단일 단어가 필요한 컨텍스트에서는 와일드카드 확장이 없습니다. 와일드카드 확장(단어 분할도 포함)은 구문에 단어 목록(예: 명령 및 해당 인수 또는 배열 할당의 오른쪽)이 필요한 컨텍스트에 존재합니다. 바라보다쉘 변수의 확장과 glob 및 분할의 영향그리고언제 큰따옴표가 필요합니까?자세한 내용은.

$where목록 컨텍스트에서 와일드카드 문자를 사용하면 와일드카드 문자가 확장됩니다. 아마도 스크립트에서는 $where큰따옴표(전체를 한 단어로 만듭니다)나 다른 단어 문맥에 넣었을 것입니다 .

스크립트가 bash(일반 sh가 아님) 스크립트인 경우 where배열을 만들 수 있습니다.

where=(/sys/class/backlight/*)

"${where[@]}"그런 다음 백라이트 장치의 디렉터리 목록을 사용할 수 있습니다 . 이상하게도 ksh는 배열의 첫 번째 요소를 취하고 나머지는 무시하는 것과 $where동일한 작업을 수행하므로 장치가 있다고 가정하면 단어 컨텍스트에서 계속 사용할 수 있습니다.${where[0]}$where

관련 정보