Shell

使用 $1 和備份預設值的別名列印參數和備份值

  • May 11, 2021

我想創建一個可以處理參數 ( $1) 的別名,如果未提供參數,可以回退到預設值。例如,

$ alias foo='NUM=${1:-42}; echo $NUM'

在沒有參數的情況下呼叫它可以按我的意願工作:

$ foo
42

但是使用參數呼叫,它會列印我的值和預設值:

$ foo 69
42 69

我不明白為什麼會這樣。應該如何正確完成?我怎樣才能自己調試這種問題?

別名只是在另一輪 shell 語法解釋之前的文本替換,它們不帶參數,所以在之後:

foo 69

foo文本被替換為,然後NUM=${1:-42}; echo $NUMshell 解釋生成的文本:

NUM=${1:-42}; echo $NUM 69

$1仍然沒有設置,所以這是NUM=42; echo 42 69

對於在目前 shell 中解釋並接受參數的內聯腳本,請改用函式

foo() {
 NUM=${1-42}
 printf '%s\n' "$NUM"
}

在這裡使用${1-42}而不是${1:-42},就像使用者呼叫一樣foo '',我會假設他們希望$NUM被分配空字元串。

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