Shell
如何將參數傳遞給別名?
對於 bash 腳本,我可以
"$@"
用來訪問參數。當我使用別名時有什麼等價物?
別名就像命令一樣,它們的所有參數都作為參數傳遞給它們別名的程序。例如,如果您要別名
ls
為ls -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
執行別名時刪除函式定義,因此它不會在之後徘徊。