pie*_*tti 15 bash shell-script function
为什么不在这个简单的 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?
Run Code Online (Sandbox Code Playgroud)
wei*_*dan 43
位置参数指的是脚本主层中的脚本参数,但指的是函数体中的函数参数。所以
print_something Something
Run Code Online (Sandbox Code Playgroud)
实际上会打印Something
.
如果要将脚本的参数传递给函数,则必须显式执行此操作。用
print_something "$1"
Run Code Online (Sandbox Code Playgroud)
传递第一个参数,或
print_something "$@"
Run Code Online (Sandbox Code Playgroud)
传递所有这些,尽管示例中的函数只使用第一个。
Rud*_*diC 10
这是因为被调用的函数获得自己的一组位置参数,独立于父/调用者的设置。尝试
print_something "$1"
Run Code Online (Sandbox Code Playgroud)
(并且echo "$1"
,甚至更好printf '%s\n' "$1"
,记住引用参数扩展并且echo
不能用于任意数据)。