相关疑难解决方法(0)

除了 Bash 和 Zsh 之外的 shell 是否支持 ANSI-C 引用?例如 $'string'

我有一个 shell 脚本,它使用以下内容在其输出中打印绿色复选标记:

col_green="\e[32;01m"
col_reset="\e[39;49;00m"

echo -e "Done ${col_green}?${col_reset}"
Run Code Online (Sandbox Code Playgroud)

在阅读了 Bash 的ANSI-C Quoting 之后,我意识到我可以在设置颜色变量时使用它并-e从我的echo 中删除标志。

col_green=$'\e[32;01m'
col_reset=$'\e[39;49;00m'

echo "Done ${col_green}?${col_reset}"
Run Code Online (Sandbox Code Playgroud)

这似乎很吸引人,因为这意味着无论是传递给 Bash 的内置echo还是外部 util /bin/echo(我使用的是 macOS),消息都能正确打印。

但这是否会降低脚本的可移植性?我知道 Bash 和 Zsh 支持这种引用风格,但我不确定其他人。

shell string quoting escape-characters portability

14
推荐指数
1
解决办法
1425
查看次数

为什么我的 grep 表达式需要使用 $'string' 来匹配制表符?

如果您使用此代码:

echo -e '\t\t\tString' | grep '^[\t]*String'
Run Code Online (Sandbox Code Playgroud)

结果是空白,因为它不匹配,但是:

echo -e '\t\t\tString' | grep $'^[\t]*String'
Run Code Online (Sandbox Code Playgroud)

作品。我发誓我一定在我的脚本和终端中使用了第一行的代码一百次,从来没有使用过这样的“$”字符,而且它似乎总是有效。最近有什么变化吗?为什么需要“$”字符?还是我做错了什么?

bash quoting regular-expression

6
推荐指数
1
解决办法
1522
查看次数