![为什么函数中的 $1 不打印脚本的第一个参数?](https://linux22.com/image/139160/%E4%B8%BA%E4%BB%80%E4%B9%88%E5%87%BD%E6%95%B0%E4%B8%AD%E7%9A%84%20%241%20%E4%B8%8D%E6%89%93%E5%8D%B0%E8%84%9A%E6%9C%AC%E7%9A%84%E7%AC%AC%E4%B8%80%E4%B8%AA%E5%8F%82%E6%95%B0%EF%BC%9F.png)
为什么这个简单的 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
不能用于任意数据)。