複数の引用符とキー文字(&、$、!など)を使用して内容をエコーし​​ます。

複数の引用符とキー文字(&、$、!など)を使用して内容をエコーし​​ます。

これをファイルにエコーする必要があるとしましょう。

RZW"a4k6[)b!^"%*X6Evf

どうすればいいですか?

私がエコーしたい実際の「行」は2048の文字行です。

答え1

一重引用符で囲んで入力してください。

echo 'RZW"a4k6[)b!^"%*X6Evf' > file

ただし、文字列に一重引用符が含まれている場合は、"'"次のように二重引用符()内の各一重引用符をエスケープして結果を一緒に「接着」する必要があります。

echo 'text without single quotes'"'"'and other text without single quote'

答え2

ランダムコンテンツの場合は、次を使用することもできます。

cat << 'EOF' > file
RZW"a`4$k6[)b!^"'%*X6Evf
RZW"a`4$k6[)b!^"'%*X6Evf
EOF

(コンテンツにでのみ構成された行が含まれていない限りEOF、この場合は別の区切り文字を使用できます)。

^@NUL文字(通常は使用またはCtrl+VCtrl+Space入力)を含めるには、Ctrl+VCtrl+@上記の内容のみが適用されますzsh。他のシェル(およびzsh)を使用すると、次のことができます。

cat > file

テキストを入力し、完了したら空白行をクリックしますCtrl+DCtrl-D終了しない行を含めるにはダブルクリックします)。

任意で潜在的にバイナリデータを処理する別の方法は、次のようなものをuuencode使用することですbase64

たとえば、

 printf '\0\1\2\3' > file

次のように書くことができます:

uudecode << 'EOF'
begin 644 file
$``$"`P``
`
end
EOF

uuencode file < some-filesome-file(特定のコンテンツを含む場所を実行して得られる出力)

答え3

「こちらのドキュメント」を使用します。

cat >my_file <<__EOF__
RZW"a4k6[)b!^"%*X6EvF
__EOF__

シェルが<<foo構文を見るとき、それが何であるかを覚えていて、自分の行を見るfooまで読み続けます。foo次に、読み取った内容( . を除くfoo)をプログラムの標準入力に渡します。

答え4

コマンドライン引数として使用する項目を生成するには、変数(または変数に入ることを保証する他の項目)に入れます。言葉- それからディスカッション)に渡され、printfbash / ksh93に残りのタスクを実行させます。

# Reading from stdin
# pbpaste | bash -c '
printf echo\ %q\\n "$(cat)"
# ' | pbcopy
# Then paste it into your script and echo happily.
# Maybe I should use the `read' builtin instead..

関連情報