私は次のようなものを実行する必要があります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,b
mycommand
-f
a,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
往復旅行をそのまま維持できないあいまいな出力を印刷します。)