簡體   English   中英

在 bash 腳本別名中使用函數參數

[英]Using function parameters in a bash script alias

我有一個 bash 腳本,我想為其添加一個別名,該腳本使用一些函數參數。 但是,由於某種原因,當我使用傳遞的參數時,該命令不起作用。

我的別名:

alias pa='_pa() { php artisan "$1" "$2" "$3" "$4" "$5"; }; _pa'

哪個應該可以合並php artisan cache:clearpa cache:clear

但是,這給了我一個輸入提示,而不是預期的命令: php artisan cache:clear

為什么我無法使用此功能創建別名?

你為什么這樣做? 只需將別名更改為:

alias pa='php artisan'

或者完全扔掉別名,只使用一個函數?

pa() {
  php artisan "$@"
}

使用"$@"將擴展到與您發送給pa一樣多的參數

別名不帶參數。 如果你有一個別名foo並寫

foo x y z

shell 只是將foo擴展到您定義的任何內容,例如,如果

alias foo='bar baz'

,上面的行將變成

bar baz x y z

這就是為什么它在手冊頁中被稱為別名擴展而不是別名調用

此外,您的別名pa毫無意義。 除了定義一個名為 _pa 的函數然后調用它之外,它什么都不做。 因此,如果在您的 shell 中之前沒有定義過此名稱的函數,請執行

pa 10 20 30 40 50

擴展為

_pa() { 
     php artisan "$1" "$2" "$3" "$4" "$5"
}
_pa 10 20 30 40 50

從而導致函數 _pa 出現並調用這個函數。 由於我們有別名擴展,那些剩余的參數 (10, 20,...) 被附加到該行並最終作為函數 _pa 的參數。

基本上,每次重復使用別名pa ,您都會丟棄舊的_pa並重新創建它。 不禁止這樣做,但更簡潔的解決方案是單獨定義函數,如果您出於任何原因想要為該函數使用第二個名稱,請在以下定義別名:

_pa() { 
     php artisan "$1" "$2" "$3" "$4" "$5"
}
alias pa=_pa

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM