
為什麼這個簡單的 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
不能用於任意數據)。