スペースを含む変数をテキストファイルにエコーしたいです。
a=a\ b\ c
echo $a > /tmp/a
上記の結果はa b c
それを含むファイルです。ファイルを読む必要がある場合はどうすればよいですかa\ b\ c
?
試してみましたが、printf %q $a
それも私が望む効果を得ていないようです。
注:また、私がコンテンツを生成しないと仮定すると、$a
コンテンツが私に配信されるのは私のコントロールの範囲外です。エスケープされたスペースと一緒に保存されていることを確認してください。
答え1
バックスラッシュは次の文字をエスケープします。あなたの場合はスペースをエスケープし、この時点の内容は次$a
のとおりですa b c
。 $a の内容にバックスラッシュを含めるには、バックスラッシュをエスケープする必要があります。
a=a\\\ b\\\ c
または
a='a\ b\ c'
$a にスペースを含むテキストが既に含まれていてファイルに保存するには、次の手順を実行します。
printf "%q" "$a" > /tmp/a
実行時:
printf "%q" $a > /tmp/a
printfに引用するように指示します。サム分割および glbbed テキストスニペット: a
、b
、 、c
、 /tmp/a にリダイレクトする前に忠実にエスケープします(何もしません)abc
。
注意深くお読みください:スペースやその他の特殊文字が原因でシェルスクリプトが停止するのはなぜですか?何が起こったのか見てください。
答え2
引用符で囲んでください。
a="a\ b\ c"
または脱出から脱出してください。
a=a\\\ b\\\ c
どちらも同じ結果で終わります。
答え3
Jeffのフィードバックに基づくソリューション:
echo $a | sed -e "s/ /\\\ /g" > /tmp/a