因为我需要能够打印可能会被视为选项的行,所以我设计了一个用于打印到终端的echo
shell 函数。printf
如果我需要打印换行符或制表符,我知道我必须使用%b
而不是%s
因为printf "%s" "\n"
会将文字打印\n
到屏幕上。该函数定义如下:
my_echo () {
printf "%b" "${1}"
}
Run Code Online (Sandbox Code Playgroud)
就在最近,我发现尝试打印转义转义序列比通常更复杂。该命令printf "%b" "\\n"
将打印换行符。要打印换行符的文字,我必须使用printf "%b" "\\\n"
,但使用它需要重新编码我的所有其他函数和脚本来处理这个问题。有什么方法可以得到printf "%b" "\\n"
或以任何方式作为转义的转义序列出现吗?
引用类型很重要。如果您不希望反斜杠在到达函数之前被解释,请将它们放在单引号字符串中:
printf '%b' '\\n'
Run Code Online (Sandbox Code Playgroud)
...按照您的要求打印一个反斜杠,后跟一个n
,不带尾随换行符。
将转义序列保留在格式字符串中,而不是数据中。因此:
my_echo() { printf '%s\n' "$*"; }
my_echo_n() { printf '%s' "$*"; }
Run Code Online (Sandbox Code Playgroud)
实际上更接近于标准echo
行为:只打印换行符可以通过my_echo
不带参数的调用来完成;打印文字也可以通过传递该文字来完成:my_echo_n $'\n'
将打印文字换行符,而不%b
涉及任何内容。
同样,要包含文字选项卡:
my_echo $'hello\tworld'
Run Code Online (Sandbox Code Playgroud)
或者
my_echo "hello"$'\t'"world"
Run Code Online (Sandbox Code Playgroud)