1

変数補間なしで一重引用符と二重引用符を含むbashコマンド引数を引用する最も簡単な方法は何ですか?

Rubyでは、%{}、%[]などを使用して文字列を引用できます。その場合、一重引用符と二重引用符は文字として扱われます。

私の質問はここでは本当に完全ではありませんでした:さらなる説明です:

私がそれを求めている理由は、私がコマンドラインでrubyとperlのコードを実行することが多いからです。これらの言語は広範囲に一重引用符と二重引用符、および$ 1 $_などのグローバル変数を使用しているため、bashとの競合が発生します。

例:

ls -lat | ruby -p -e '$_ =~ /(\S+)\s+(\S+)\s+(\S+)/; $_ = "'\''" + ($3 || "") + "'\''" + "\n"'

私はルビーの%引用符に似たものを探していました:

ls -lat | ruby -p -e %{$_ =~ /(\S+)\s+(\S+)\s+(\S+)/; $_ = "'" + ($3 || "") + "'" + "\n"}
4

2 に答える 2

5

ヒアドキュメントでおそらく最も簡単です:

read -r arg << \EOF
A string "with" 'quotes'
EOF

$argをヒアドキュメントの補間されていないコンテンツに設定します。これにより、改行を変数に埋め込むことはできません。複数行の値が必要な場合:

unset var; while read -r v; do var="$var${var+
}$v; done << \EOF
A multi-line "" string
with different 'quotes'
EOF

残念ながら、IFSを使用したOrmaajのコメントは、改行をキャプチャするためには機能しません。

于 2012-10-10T02:57:47.300 に答える
1

変数の補間は必要ないため、引用符を使用できます$'...'(ただし、一重引用符をエスケープする必要があるため、要件に合わない場合があります)。

x=$'String containing \' and "'
于 2012-10-10T03:11:03.847 に答える