假设您必须将其回显到文件中:
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
。使用其他 shell(和zsh
),您可以执行以下操作:
cat > file
输入文本并在完成后点击Ctrl+D空行(Ctrl-D如果要包含非终止行,则点击两次)。
处理任意、潜在的二进制数据的另一种方法是使用类似uuencode
or 的东西base64
:
例如:
printf '\0\1\2\3' > file
可以写成:
uudecode << 'EOF'
begin 644 file
$``$"`P``
`
end
EOF
uuencode file < some-file
(通过运行where获得的输出some-file
包含该特定内容)。
答案3
我会使用“此处文档”。
cat >my_file <<__EOF__
RZW"a4k6[)b!^"%*X6EvF
__EOF__
当 shell 看到<<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..