为什么这个简单的 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
不能用于任意数据)。