私は初めてBashスクリプトに触れました。より高度な/有用なスクリプトの基礎として使用する「テストスクリプト」があります。
#!/bin/bash
files=$1
for a in $files
do
echo "$a"
done
引用符なしで呼び出すと、ディレクトリ内の1つのファイルのみが選択されます。
testscript *.txt
しかし、引用符を使用して呼び出すとうまく機能し、すべてのテキストファイルを選択します。
testscript '*.txt'
ここで何が起こっているのでしょうか?
ベストアンサー1
プログラムを呼び出すとき
testscript *.txt
それからあなたのシェルすべての値を拡張して計算します。したがって、プログラムを効果的に呼び出すことができます。
testscript file1.txt file2.txt file3.txt file4.txt
今、あなたのプログラムは見るだけで$1
適用されますfile1.txt
。
コマンドラインから引用すると、リテラル文字列がに保存され、*.txt
スクリプトに渡されます$1
。for
その後、ループはそれを拡張します。
通常、次のスクリプトでは and を使用します"$@"
。$1
これはCMDを使用してスクリプトを作成する人にとっては「問題」であり、コマンドシェルではこれを行うことはできません。ワイルドカード(よく知られている)常にリテラル文字列を渡します。