0

だから私はこのbash関数を持っています:

function xyz(){
  echo $@
}

今私が走るとき

xyz whaat  "loool * hahhaa"

反響する代わりにwhaat "loool * hahhaa"

代わりにエコーします:

whaat loool all default hahhaa

まず、引用符が取り除かれました。次に、 * が "all default" に置き換えられました。これは、現在のディレクトリに「all」と「default」という 2 つのフォルダがあるためです。したがって、* は現在のディレクトリ内のすべてのディレクトリを参照すると考えられます。

出力が意図したとおりになるように関数を変更する方法はありますかwhaat "loool * hahhaa"(引用符と * を含む)

やってみ${@} "$@"まし"${@}"たがダメでした

4

1 に答える 1

4

引用符は本当になくなっているので、元に戻すものは期待しないでください。Bash は、コマンド ラインの解析の一環としてそれらを削除しました (「引用符の削除」で検索してman bashください)。

ただし、echo "$@"orecho "${@}"はグロブ展開を回避します (*ディレクトリ リストに置き換えます)。

あなたは実質的に決して望んでいません$@。書く習慣をつけるのが一番"$@"です。

引用されたバージョンの引数を見たい場合は、printf への bash-extension を実行できます:

xyz() {
  printf "%q " "$@"
  printf "\n"
}
于 2013-10-17T19:21:16.670 に答える