為什麼函數中的 $1 不列印腳本的第一個參數?

為什麼函數中的 $1 不列印腳本的第一個參數?

為什麼這個簡單的 bash 腳本 不echo $1列印?$1

#!/bin/bash
# function.sh
print_something () {
echo $1
}
print_something

$ ./function.sh 123  -> why doesn't it print '123' as a result?

答案1

位置參數是指腳本主層級中的腳本參數,但函數參數在函數體內。所以

print_something Something

實際上會列印Something.

如果要將腳本的參數傳遞給函數,則必須明確執行此操作。使用

print_something "$1"

傳遞第一個參數,或者

print_something "$@"

透過所有這些,儘管範例中的函數僅使用第一個。

答案2

這是因為被呼叫函數獲得自己的位置參數集,獨立於父函數/呼叫者的集。嘗試

print_something "$1"

(並且echo "$1",甚至更好的是printf '%s\n' "$1",請記住引用參數擴展,並且echo不能用於任意數據)。

相關內容