1

関数があるとします

print_args () {
    for i in $@; do
        echo "$i"
    done
}

私がする時

foo='\*'
print_args $foo

私は得る

\*

(バックスラッシュ付き)出力として。

代わりにの定義を変更するとfoofoo='*'の実行時に現在のディレクトリ内のすべてのファイルが取得されますprint_args $foo

したがって、バックスラッシュを含めるか、解釈しますが、文字通り*取得する方法がわかりません。*

二重引用符を含めても含めなくても、出力は同じ$fooです。

4

1 に答える 1

1

一般的なルールは、すべての変数を引用することです。スペースでのシェルの拡張と分割を防ぎます。したがって、関数は次のようになります(引用符$@、および${array[@]}引数による分割):

print_args () {
    for i in "$@"; do
        echo "$i"
    done
}

そして、次のように呼び出します。

print_args "$foo"
于 2015-07-22T08:03:51.293 に答える