$@文字通りprintfする方法はありますか?

$@文字通りprintfする方法はありますか?

改行なしで潜在的な二重引用符を含め、そのままエコーするstdoutスクリプトを作成したいと思います。$@

私が試したこと:

> cat ./script1    
#! /usr/bin/bash
printf "%s %s" $0 $@
echo -n $0 $@
echo -n "$0 $@"
> 
> ./script1 a "bc d"
./script1 abc d./script1 a bc d./script1 a bc d>

私のスクリプトを次のように実行したいと思います。

> ./script1 a "bc d"
./script1 a "bc d">

これを行う方法はありますか?

ベストアンサー1

この例では、位置パラメータに二重引用符が含まれていません。

./script1 a "bc d"

二重引用符は、単にbcとの間のスペースで単語を区切るべきではないことをシェルに伝えますd

2番目の引数にリテラル引用符を含めるには、エスケープしてシェルにリテラルであることを知らせる必要があります。

./script1 a '"bc d"'

または

./script1 a \"bc\ d\"

printfシェル入力(エスケープ)で再利用できる形式で印刷できます。

$ set -- a "bc d"
$ printf '%q\n' "$@"
a
bc\ d

見てわかるように、これは単にスペースから抜け出すことです。

おすすめ記事