为什么函数中的 $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不能用于任意数据)。

相关内容