$Namefile* がこの結果を提供するのはなぜですか?

$Namefile* がこの結果を提供するのはなぜですか?

私のコードにはこのような部分があります。

Namefile=$1
for n in $Namefile*
do
echo $n
done

この部分の結果は次のとおりです。

$ sh example.sh hw1
hw1_evening_sun.txt
hw1_morning_sun.txt
hw1_out_si_wire.txt
hw1_script.sh
hw1_script2.sh
hw1_script3.sh
hw1_sun1.txt
hw1_sun2.txt

"hw1"という名前で始まるファイルがありますが理解できません。$Namefile* がこれらの名前を使用する理由私が知っている限り、*呼び出しスクリプトはパラメータを受け取ります。

この方法はなぜこのように動作するのでしょうか?誰かがこれの論理を説明できますか?

ベストアンサー1

$ Namefile *がなぜこれらの名前を使用するのかわかりません。私が知っている限り、*呼び出しスクリプトはパラメータを受け取ります。

$ Namefileは渡された値(おそらく「hw」)に展開されます。これは、$ Namefile *変数が拡張後に「hw *」になることを意味します。

*は、この文字列がファイル名として解釈されるために使用されるときに特別です。マニュアルページの「パス名の拡張」を参照してください。

... bashは各単語で*、?と[文字を検索します。これらの文字のいずれかが発生すると、その単語はパターンとして扱われ、パターンと一致するファイル名のアルファベット順のリストに置き換えられます。

おすすめ記事