Shell

如何將參數傳遞給別名?

  • November 24, 2021

對於 bash 腳本,我可以"$@"用來訪問參數。當我使用別名時有什麼等價物?

別名就像命令一樣,它們的所有參數都作為參數傳遞給它們別名的程序。例如,如果您要別名lsls -la,那麼鍵入ls foo bar真正ls -la foo bar在命令行上執行。

如果您想實際控制參數的解釋方式,那麼您可以編寫如下函式:

my_program_wrapper() {
   local first_arg="$1" \
         second_arg="$2"

   shift 2               # get rid of the first two arguments

   # ...

   /path/to/my_program "$@"
}

別名解決方案

如果你真的反對使用函式本身,你可以使用:

$ alias wrap_args='f(){ echo before "$@" after;  unset -f f; }; f'
$ wrap_args x y z
before x y z after

如果您只想要第一個參數,則可以替換$@為。$1

解釋

這將創建一個臨時函式f,該函式被傳遞參數。

別名參數僅在最後傳遞。請注意,f在別名的最後呼叫。

unset -f執行別名時刪除函式定義,因此它不會在之後徘徊。

引用自:https://unix.stackexchange.com/questions/3773