1

コマンドラインにこれ​​がある場合:

bin/my_file --name "this name with whitespace" dir/some_file

次に、私のスクリプトで:

full_cmd="$@"
# later...
"$full_cmd"

引用符は保持されません。これは私が来た最も近いものです:

 app=$1
 shift
 $app "$@"

ただし、次のように、「$@」を変数に保存して後で再利用できると便利です。

 my_func () {
    $app "$args"
 }

私はその仕事のいずれかを行うことができませんでした...乱雑以外for loops。私はバッシュが初めてです。他のすべての可能な解決策を検索しましたが、なぜこれが難しいのかわかりません。明らかな何かが欠けていますか?

4

2 に答える 2

5

$@配列です。配列に格納します。

ar=("$@")
"${ar[@]}"
于 2013-08-22T16:52:03.713 に答える
2

@choroba の回答は良いですが、$0 が $@ にないことを知っておく必要があります。同様に、ここに代替手段があります:

printf -v myvar '%q ' "$@"

次に、文字列シェルをエスケープして、個別の引数として正しく解釈されます。忘れないでください-eval変数からコマンドを呼び出すために使用する必要があります!

ところで、ここで $myvar は通常の文字列変数です。上記のような配列ではありません。個別の引数が、間にスペースを入れてシェルエスケープされているだけです。

お役に立てれば。

資力:

于 2013-08-22T17:35:45.613 に答える