これは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
二重引用符(全体を1つの単語にします)または別の単語のコンテキストに入れたのでしょう。
スクリプトがbash(通常shではない)スクリプトの場合は、where
配列を作成できます。
where=(/sys/class/backlight/*)
"${where[@]}"
その後、バックライトデバイスのディレクトリリストを使用できます。奇妙なことに、kshは配列の最初の要素を取り、残りは無視するのと$where
同じことを行うので、デバイスがあると仮定すると、単語コンテキストで引き続き使用できます。${where[0]}
$where