エイリアスで ' を使用するにはどうすればいいですか?

エイリアスで ' を使用するにはどうすればいいですか?

エイリアスを使用して呼び出したい行が 1 行あります。

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

またはの代わりに$()が引用符で囲まれている場合は、それが置き換えられ、意図したプログラム呼び出しではなく結果がエイリアス定義の一部になります。"'\

答え2

これをエイリアスにすることもできますが、通常は関数が好まれます。出典man bash:

ほとんどすべての目的において、エイリアスはシェル関数に置き換えられます。

関数形式のエイリアス:

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では、エイリアスは定義時に展開され、かもしれない引数を取ったり変数を使用したりしたかのように動作します。 場合によっては。 マーフィーの法則により、本当に必要なときにはそれが機能しないことが保証されます。

関連情報