当然,可以使用 echo -e 以便将 \n 理解为新行。问题是当我想回显以 \t 开头的内容时,例如“\test”。
假设我想表演echo -e "test\n\\test"。我期望输出:
Run Code Online (Sandbox Code Playgroud)test \test
但相反输出:
Run Code Online (Sandbox Code Playgroud)test est
被\\t解释为制表符而不是文字 \t。这个问题有一个干净的解决方法吗?
echo -e "\\t"
Run Code Online (Sandbox Code Playgroud)
传递\t给是echo因为反斜杠在 中的双引号内是特殊的bash。它用作转义(引用)运算符。在 中\\,它逃脱了自身。
你可以这样做:
echo -e "\\\\t"
Run Code Online (Sandbox Code Playgroud)
forecho被传递\\t(echo -e "\\\t"也可以),或者您可以使用单引号,其中\不特殊:
echo -e '\t'
Run Code Online (Sandbox Code Playgroud)
现在,echo是一个非常不可移植的命令。即使在 中bash,其行为也可能取决于环境。我建议避免使用它并使用printf它,您可以这样做:
printf 'test\n\\test\n'
Run Code Online (Sandbox Code Playgroud)
或者甚至决定哪些部分经历这些转义序列扩展:
printf 'test\n%s\n' '\test'
Run Code Online (Sandbox Code Playgroud)
或者:
printf '%b%s\n' 'test\n' '\test'
Run Code Online (Sandbox Code Playgroud)
%becho理解与(some s)相同的转义序列echo,而 的第一个参数(printf格式)也理解序列,但方式与echo(更像其他语言中的做法)略有不同。无论如何,\n双方都明白。