是否有任何 Linux 应用程序只打印您提供的任何内容而不进行任何类型的解释?因此,无论我发送给它什么,它总是会准确地输出我发送给它的内容?
echo
我想要具有或功能的东西printf
,但不解释\
和其他所有内容。
这是我想要的应用程序类型:
newcommand "sa"" '' " "' ''""d f\sad\ f\sad\ \df\\ h\df\\\\\ sdf\h\sdfh\"" """" ''" " "ds\f\\\\ $%% \\as\ fsa\dg\ \afd\g\ \df\g \\df\g\\\\ n\ \n \\ sa\d \as \t a fsad g"" DF"G ""SD"F"" "DF"SG" """"Ds f"G" 'dsf'g 'sdf" G'ds f'g"SD fG"sd'f'g 'SFD""" ' > testfile1
cat testfile1
"sa"" '' " "' ''""d f\sad\ f\sad\ \df\\ h\df\\\\\ sdf\h\sdfh\"" """" ''" " "ds\f\\\\ $%% \\as\ fsa\dg\ \afd\g\ \df\g \\df\g\\\\ n\ \n \\ sa\d \as \t a fsad g"" DF"G ""SD"F"" "DF"SG" """"Ds f"G" 'dsf'g 'sdf" G'ds f'g"SD fG"sd'f'g 'SFD""" '
我找不到任何具有此功能的程序。基本上,每个位置参数都按原样输出,包括"
和'
。唯一没有按原样输出的内容是出于|<>
明显的原因
好的,这是我想要的更好的例子:
我想要一些可以在命令行和一行中完成的东西,可以使用nano
或vi
并编写一整行文本来实现。
答案1
这些"
,\
是 shell 语法的一部分,它们不是传递给命令的东西,命令不能对它们执行任何操作。
这
printf %s 'foo " bar' "bar ' baz" > file
命令行是sh
语言中的代码(其中空格、、、'
字符"
具有>
特定含义),它不是传递给printf
实用程序的行。
shell 将其解释为使用printf
,%s
作为参数运行,foo " bar
并且bar ' baz
其标准输出重定向到file
。
所printf
看到的只是参数列表,它看不到printf
用于使用该参数列表调用它的 shell 代码(或者 python 代码,如果是从 python 而不是 shell 调用的)。printf %s
将打印其中的每一个而不做任何解释,这将导致file
包含foo " barbar ' baz
.
这里你可以使用另一种 shell 语法结构:here-document,这里的 document 分隔符被引用,在这种情况下,不进行任何解释:
cat << 'EOF' > testfile
"sa"" '' " "' ''""d f\sad\ f\sad\ \df\\ h\df\\\\\ sdf\h\sdfh\"" """" ''" " "ds\f\\\\ $%% \\as\ fsa\dg\ \afd\g\ \df\g \\df\g\\\\ n\ \n \\ sa\d \as \t a fsad g"" DF"G ""SD"F"" "DF"SG" """"Ds f"G" 'dsf'g 'sdf" G'ds f'g"SD fG"sd'f'g 'SFD""" '
EOF
对文本的唯一限制是:
- 除了 with 之外
zsh
,它不能包含 NUL 字节 - 它不能包含
EOF
在自己的行上(如果需要,您可以使用不同的分隔符) - 除非文本为空,否则始终会添加尾随换行符。
或者你可以运行:
cat > file
之后,它cat
不再是 shell 接受您的用户输入,然后您可以根据需要输入内容并以 结尾Ctrl+D。
作为一种黑客,您可以依靠这样一个事实:shell 不会对注释中的文本进行任何解释,并从保存的历史记录中检索命令行并输出#
.例如,使用bash
shell 交互:
fc -l -0 | cut -d '#' -f3- > testfile #the text here with \ ' "
答案2
它不是特定于 Linux 的应用程序,但是cat
当不带参数运行时,它会执行此操作:它将其标准输入复制到其标准输出,而不进行任何更改。