如何在别名中使用 '?

Rad*_*dek 5 alias shell-script quoting escape-characters

我有一行要使用别名调用。

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

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

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

Hau*_*ing 5

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

你可以检查结果

alias my_du
Run Code Online (Sandbox Code Playgroud)

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


l0b*_*0b0 5

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

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

函数形式的别名:

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

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