個々のディレクトリ/ファイルと一致するワイルドカード拡張

個々のディレクトリ/ファイルと一致するワイルドカード拡張

これは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

関連情報