これをファイルにエコーする必要があるとしましょう。
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+D(Ctrl-D終了しない行を含めるにはダブルクリックします)。
任意で潜在的にバイナリデータを処理する別の方法は、次のようなものをuuencode
使用することですbase64
。
たとえば、
printf '\0\1\2\3' > file
次のように書くことができます:
uudecode << 'EOF'
begin 644 file
$``$"`P``
`
end
EOF
uuencode file < some-file
some-file
(特定のコンテンツを含む場所を実行して得られる出力)
答え3
「こちらのドキュメント」を使用します。
cat >my_file <<__EOF__
RZW"a4k6[)b!^"%*X6EvF
__EOF__
シェルが<<foo
構文を見るとき、それが何であるかを覚えていて、自分の行を見るfoo
まで読み続けます。foo
次に、読み取った内容( . を除くfoo
)をプログラムの標準入力に渡します。
答え4
コマンドライン引数として使用する項目を生成するには、変数(または変数に入ることを保証する他の項目)に入れます。言葉- それからディスカッション)に渡され、printf
bash / 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..