要转义哪个字符才能在 ~/.bashrc 中工作

ass*_*nss 3 command-line bash bashrc

我想将此iostat命令添加到我的.bashrc并为其创建别名:

iostat -xk 2 $(findmnt -T ~ | awk 'END {print $2}')
Run Code Online (Sandbox Code Playgroud)

我将此添加到我的.bashrc

alias ios='iostat -xk 2 $(findmnt -T ~ | awk 'END {print $2}')'
Run Code Online (Sandbox Code Playgroud)

不幸的是,它不起作用。

如果我iostat在终端中运行上面的命令它可以工作,但是当我运行ios别名时它不再工作。

是的,我每次都重新启动我的外壳。

che*_*ner 10

改用函数;引用更简单:

ios () {
  iostat -xk 2 $(findmnt -T ~ | awk 'END {print $2}')
}
Run Code Online (Sandbox Code Playgroud)


Rin*_*ind 6

alias ios='iostat -xk 2 $(findmnt -T ~ | awk 'END {print $2}')'
Run Code Online (Sandbox Code Playgroud)

您不能在引号内使用引号。在引用和双引号之间交替是最简单的方法。所以这有效:

$ alias ios="iostat -xk 2 $(findmnt -T ~ | awk 'END {print $2}')"
$
Run Code Online (Sandbox Code Playgroud)

从编辑:

请注意,尽管它在这种情况下有效(因为在此期间~不会移动到不同的块设备),但“软”外部引号导致在定义时而不是在别名调用时动态评估命令替换

如果您需要单引号,您可以使用'"'"'以下方法将它们粘在一起:

$ alias ios='iostat -xk 2 $(findmnt -T ~ | awk '"'"'END {print $2}'"'"')'
$
Run Code Online (Sandbox Code Playgroud)

  • 请注意,虽然它在这种情况下*有效*(因为在此期间`~`不会移动到不同的块设备),“软”外部引号导致在定义时而不是动态地评估命令替换关于别名调用 (5认同)
  • 使用双引号,命令替换将在您定义别名时运行,而不是在您使用它时运行。 (3认同)