【发布时间】:2021-05-21 01:48:25
【问题描述】:
首先对环境做一点说明:
- 重击 5
- 默认 MacOS 终端
在我的bash_profile 中,我声明了以下函数以快速查看我的计算机拥有的所有 IPv4:
YB=$(tput setaf 11)
WB=$(tput setaf 15)
RESET=$(tput sgr0)
lanconfig() {
for ip in $(ifconfig | grep inet\ | cut -f 2 -d \ ); do
echo -e "$WB LAN IP:$YB ${ip:3} $RESET"
done
}
使用该功能一切正常,我得到以下输出:
LAN IP: 127.0.0.1
LAN IP: 192.168.1.100
其中LAN IP: 为白色,实际 IP 地址为黄色。
现在你知道了背景,让我们假设一分钟函数内的echo 而是在$ip 上执行参数扩展,它只是打印 var。比如:
echo -e "$WB LAN IP:$YB $ip $RESET"
使用 echo,黄色不适用于 IP。我很震惊,我不明白。用参数扩展做一些测试,我发现扩展${ip:1} 打印[m127.0.0.1
问题是:
-
[m是什么意思? - 为什么
[m在变量中? - 摆脱那个角色值得吗?怎么样?
【问题讨论】:
-
很确定这是一个 ANSI 颜色代码。如果这是正确的,你可以摆脱它。
-
@raaowx :看起来您在设置
ip时遇到了颜色转义码。其中还应该有一个 escape 字符(使用xxd <<<"$ip"进行检查)。cut不会产生它们,所以它要么是ifconfig(用ifconfig|xxd测试它)要么是grep。在后一种情况下,我会得出结论,您已将环境变量GREP_OPTIONS设置为导致着色的内容。 -
@user1934428 也许我的别名 grep='grep —color=always' 有干扰?
-
@user1934428 我现在可以确认别名
grep='grep --color=always'是问题所在。 -
永远不要对别名使用相同的名称作为别名的命令。你可以做一个
alias g='grep --color=always'。通常,我们只在命令行上使用别名,而不是在函数或脚本的主体中,调用它g也更容易输入。
标签: bash shell special-characters