Isso funciona lindamente no BASH:
$ where=/sys/class/backlight/*
$ echo $where
/sys/class/backlight/intel_backlight
No entanto, quando colocado no script POSIX como /bin/sh
interpretador, isso não funciona, where
torna-se /sys/class/backlight/*
.
Eu tentei Google, mas provavelmente não estou usando os termos certos.
O valor da variável
where
é sempre a string/sys/class/backlight/*
. De um modo geral, não há expansão curinga em contextos em que a sintaxe espera uma única palavra, como o lado direito de uma atribuição escalar. Há expansão curinga (e também divisão de palavras) em contextos em que a sintaxe espera uma lista de palavras, como um comando e seus argumentos ou o lado direito de uma atribuição de matriz. Consulte Expansão de uma variável de shell e efeito de glob e divisão nela e Quando aspas duplas são necessárias? para mais detalhes.$where
expande o curinga se for usado em um contexto de lista. Presumivelmente, em seu script, você colocou$where
aspas duplas (o que torna tudo uma única palavra) ou em algum outro contexto de palavra.Se o seu script for um script bash (não sh simples), você pode criar
where
um array:Então você pode usar
"${where[@]}"
para a lista de diretórios para dispositivos de luz de fundo. Estranhamente, ksh tornou-$where
se equivalente a${where[0]}
, ou seja, pegando o primeiro elemento da matriz e ignorando o restante, portanto, se você está assumindo que há um único dispositivo, pode continuar usando$where
em um contexto de palavra.