$ 1変数を使用して、スクリプトに提供されているファイルに対して操作を実行するスクリプトを作成しています。このファイルを繰り返す最善の方法は何ですか?現在、私は次のようなものを使ってスクリプトをハードコーディングしています。
for file in *.pdf
do
act on $file
done
しかし、私はこれを行うために$ 1変数を使用したいと思います。ありがとう Barry
答え1
$1
シェルスクリプトに渡された最初の引数。したがって、スクリプトがある場合はmyscript
これを次のように呼び出します。
myscript somefile
そう$1
すればなりますsomefile
。私がこう呼んだら:
myscript *
そして、現在のディレクトリに次のファイルがあります。
foo bar baz
そう$1
すればなりますfoo
。どちらの場合も$1
値が1つだけで、繰り返す項目はありません。
パラメータを繰り返すにはいくつかの方法があります。最も一般的なものは次のとおりです。
for file in "$@"; do
echo doing something with "$file"
done
これは以下とは$@
異なります。"$@"
後者は、スペースを含むファイル名を正しく処理する特別な構造です。次のこともできます。
while [ -n "$1" ]; do
echo doing something with "$1"
shift
done
ここでshift
コマンドは最初の引数を削除し、次のように$2
なります。空でない$1
限り$1
繰り返されます。以下も使用できます$#
(コマンドライン引数の数を含む変数)。
while [ $# -gt 0 ]; do
echo arg: "$1"
shift
done
答え2
そうすれば
script *.pdf
*.pdf
すでにコマンドラインから拡張されており、$1
最初のファイルのみを参照してください。
for file in $1
したがって、必要な作業を実行しません。使用できる
for file in "$@"
代わりに。
リソースセクションを参照してください。特殊パラメータ内部にman bash