二重引用符付きの値変数をコマンドパラメータとして使用しますが、単一引用符は使用しないでください。

二重引用符付きの値変数をコマンドパラメータとして使用しますが、単一引用符は使用しないでください。

私は次のようなものを実行する必要がありますmycommand -f "a","b"

しかし、この種のbashスクリプトで実行する必要があります。

p="\"a\",\"b\""

mycommand -f "$p"

ただし、このスクリプトを実行すると、起動コマンドは次のようになります。

mycommand -f '"a","b"'

まさか

mycommand -f "a","b"

一重引用符なしでパラメータとしてどのように$p渡すことができますか?

ベストアンサー1

run と同じです。またはコマンドラインで実行されている場合mycommand -f "a","b"。シェルは引用符を削除し、引数は引用符のない2つの文字列の合計です。mycommand -f "a,b"mycommand -f a,bmycommand-fa,b

後者を変数に入れるには、引用符を追加せずに変数に保存して比較します"$var"。もちろん、値を割り当てるときに引用符を使用できます。これは削除されます。文字列をコマンドの引数として直接使用します。

var="a","b"         # or
var="a,b"           # or
var=a,b             
mycommand -f "$var"

もちろん、値に実際にfoo bar, this that空白が含まれている場合、またはシェルに特殊な他の文字が含まれている場合は、少なくともいくつかの引用符が必要です。

var="foo bar, this that"
mycommand -f "$var"

あなたが持っているなら:

p="\"a\",\"b\""
mycommand -f "$p"

その後、引用符とエスケープを処理した後、変数にが含まpれ、引数も正しい文字列になります。以前とは異なる文字列です。"a","b"mycommand

の場合、Bash、ksh、およびzshはパラメータを次の形式で表示するため、set -xこれを表示します。mycommand -f '"a","b"'シェル入力として有効、二重引用符を含む文字列には引用符が必要です。バックスラッシュは機能しますが、ここではこれらのシェルは一重引用符を好みます。

(一方、Dashはこれを行いません。set -x往復旅行をそのまま維持できないあいまいな出力を印刷します。)

おすすめ記事