不明な数のパラメータを使用してbashスクリプトを作成したいと思います。
これらの主張をどのように理解し、これについて何かをすることができますか?
間違った試みは次のとおりです。
#!/bin/bash
for i in $args; do
echo $i
done
答え1
特別な構文があります:
for i do
printf '%s\n' "$i"
done
より一般的には、現在のスクリプトまたは関数のパラメータリストは特殊変数を介して使用できます$@
。
for i in "$@"; do
printf '%s\n' "$i"
done
これを二重引用符で囲む必要があります$@
。それ以外の場合、パラメータはワイルドカード拡張とフィールド分割を受けます。"$@"
それは魔法です。二重引用符にもかかわらず、パラメータと同じくらい多くのフィールドに展開されます。
print_arguments () {
for i in "$@"; do printf '%s\n' "$i"; done
}
print_arguments 'hello world' '*' 'special !\characters' '-n' # prints 4 lines
print_arguments '' # prints one empty line
print_arguments # prints nothing
答え2
#! /usr/bin/env bash
for f in "$@"; do
echo "$f"
done
$@
パラメータを引用またはエスケープすると、パラメータにスペース(改行など)が含まれる可能性があるため、引用する必要があります\
。たとえば、
./myscript one 'two three'
引用符のため、3つではなく2つの引数になります。を引用しないと、$@
これらのパラメータはスクリプトから爆発します。