因为我需要打印可能以echo
选项开头的行,所以我设计了一个使用printf
来打印到终端的shell函数。如果我需要打印新行或制表符,我学会了必须使用%b
而不是%s
,因为printf "%s" "\n"
会将文字\n
直接打印到屏幕上。该函数定义如下:
my_echo () {
printf "%b" "${1}"
}
最近,我发现尝试打印转义的转义序列比通常情况下更加复杂。命令printf "%b" "\\n"
将打印一个换行符。要打印换行符的文字表示,我必须使用printf "%b" "\\\n"
,但是这样做需要重新编码所有其他函数和脚本来处理它。有没有办法让printf "%b" "\\n"
或其他类似命令输出转义的转义序列?
printf '%s\n' "This prints one line"
-- 否则,当您尝试回显包含文字反斜杠的值时,会遇到非常糟糕的情况。 - Charles Duffyecho
能够打印任何类型的字符串时,选项处理非常麻烦,包括像-n
或-e
这样的字符串。另一件事是,我编写了另一个函数,它使用tr
和sed
的组合来转义特殊字符(例如,将\n
(换行符)更改为\\n
)。sed
不能用于替换换行符,我在转义函数中遇到了问题,将类似\\n
的内容变成了\\\\n
(它被返回为\\n
或\n
)。 - Melabprint(stringvar)
,它将打印一个字面制表符,如果字符串原本就有一个制表符,那么这不是因为它将\t
序列解释回制表符,而是因为字符串的内容本来就是一个制表符。 - Charles Duffy