bashの他の呼び出しに二重引用符と一重引用符を含む引数を渡す[閉じる]

bashの他の呼び出しに二重引用符と一重引用符を含む引数を渡す[閉じる]

私に電話があります。

./run.sh name --vars="service_name='someothername'"

--vars="service_name='someothername'"まったく同じパラメータを使用して別のプログラムを呼び出そうとしますがrun.sh$2これを行うたびに、Bashは変数の周りに一重引用符を入れます。

cmd=$(runother $2 | process output)

私はこれ一つ持っています。

  • runother '"--vars=service_name='\''someother..
  • runother '--vars=service_name='\''someother
  • runother '--vars=service_name=someother'

私はその周りに二重引用符を入れて文字列を印刷するように一重引用符を削除しようとしました$2sub-bash 。${2//\'}printf

UPD:明らかに、プログラムは同様の問題を考慮しているので、./a --b=cこの./a '--b=c'質問は意味がなく、他のコードでエラーが発生します。

UPD2:@chorobaが以下のコメントで述べたように:「set -x単語分割がどのように機能するかを確認できるように、出力に引用符を追加してください。実際には文字列に追加されません。、でも」

ベストアンサー1

二重引用符$2(値がある場合)が正しいアプローチです。

出力を見ている場合は、set -xシェルが出力にさまざまな引用符を追加する可能性があることに注意してください。これらの追加の引用はデータの一部ではありません。

はい(中bash

var=--vars="service_name='someothername'"
printf 'var has value %s\n' "$var"

これは出力されます

var has value --vars=service_name='someothername'

しかし、set -x出力は次のようになります

$ set -x
$ var=--vars="service_name='someothername'"
+ var='--vars=service_name='\''someothername'\'''
$ printf 'var has value %s\n' "$var"
+ printf 'var has value %s\n' '--vars=service_name='\''someothername'\'''
var has value --vars=service_name='someothername'

pdkshOpenBSDから:

$ set -x
$ var=--vars="service_name='someothername'"
+ var=--vars=service_name='someothername'
$ printf 'var has value %s\n' "$var"
+ printf var has value %s\n --vars=service_name='someothername'
var has value --vars=service_name='someothername'

存在するzsh

$ set -x
$ var=--vars="service_name='someothername'"
+zsh:10> var='--vars=service_name='\''someothername'\'
$ printf 'var has value %s\n' "$var"
+zsh:11> printf 'var has value %s\n' '--vars=service_name='\''someothername'\'
var has value --vars=service_name='someothername'

デバッグ出力の追加参照について心配しないでください。変数を二重引用符で使用してください。

おすすめ記事