이것은 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