如何在别名中使用 ' ?

如何在别名中使用 ' ?

我想使用别名来调用单线。

while printf '%s ' "$(df -P / | awk 'NR==2 { print $(NF-1) }')"; do sleep 30; done

我试图逃跑'\'但没有成功。

在别名中使用上述单行代码的正确语法是什么?

答案1

alias my_du=$'while printf \'%s \' "$(df -P / | awk \'NR==2 { print $(NF-1) }\')"; do sleep 3; done'

您可以使用以下命令检查结果

alias my_du

如果$()被引用"而不是'or\那么它被替换并且结果而不是预期的程序调用成为别名定义的一部分。

答案2

虽然这可以被哄骗成别名,但函数通常是首选。从man bash

对于几乎所有用途,别名都被 shell 函数取代。

函数形式的别名:

my_du() {
    while printf '%s ' "$(df -P / | awk 'NR==2 { print $(NF-1) }')"
    do
        sleep 30
    done
}

这更具可读性,因此也更易于维护。

答案3

您无法在仍处于单引号中时转义单引号,因为\在单引号上下文中按字面意思理解。在转义之前关闭单引号,或者更好的是使用双引号。

alias my_du="while printf '%s ' \"\$(df -P / | awk 'NR==2 { print \$(NF-1) }')\"; do sleep 30; done"

答案4

如果您希望命令接受参数或以任何方式与其环境交互,请使用函数。至少在 bash 中,别名在定义时会扩展,它们可能就好像他们接受参数或使用变量一样。有时。墨菲定律确保这在真正需要时不起作用。

相关内容