带管道的 Bash 别名

n8f*_*ton 9 bash alias

我不确定我在这方面做错了什么。我正在尝试运行命令

alias localip='ip -4 -o addr show eth0 | egrep -o '([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}' | head -n 1'
Run Code Online (Sandbox Code Playgroud)

如果我运行命令

ip -4 -o addr show eth0 | egrep -o '([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}' | head -n 1
Run Code Online (Sandbox Code Playgroud)

我得到了我期望的结果,但是,当尝试使用命令创建别名时,我得到

-bash: 意外标记附近的语法错误`('

任何帮助,将不胜感激。TIA。

slh*_*hck 9

您在单引号中嵌套单引号。那行不通。

尝试在内部表达式中使用"双引号"

  • 您不能在单引号字符串中转义单引号:http://www.gnu.org/software/bash/manual/bashref.html#Single-Quotes (5认同)

kak*_*kyo 7

我发现它是一个更简洁的解决方案,只需创建一个函数并在函数后命名您的别名,如下所示:

alias localip=GetLocalIP

function GetLocalIP()
{
   ip -4 -o addr show eth0 | egrep -o '([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}' | head -n 1
}
Run Code Online (Sandbox Code Playgroud)

  • 为函数创建别名而不是仅将函数命名为 `localip` 有什么好处?此外,`function` 关键字破坏了与其他 shell 的兼容性。我建议只使用 `localip() { ...` (5认同)