如果没有使用脚本参数显式调用函数,是否有任何方法可以从脚本函数访问 bash 脚本参数?
谢谢。
只需使用脚本的参数调用该函数。
foo () {
for arg in "$@"
do
echo "$arg"
done
}
foo "$@"
不,但如果你在 Linux 上,你可以通过从 `/proc' 读取脚本的命令行来破解它:
function myfunc {
while read -d $'\0'
do
echo "$REPLY"
done < /proc/$$/cmdline
}
-d $'\0'
需要读取 cmdline 文件,因为字符串是 NULL(二进制零)分隔的。在示例中,$REPLY
将依次是每个参数,包括 bash 本身。例如:
/home/user1> ./gash.sh one two three
/bin/bash
./gash.sh
one
two
three
这是一个示例,它将函数的参数设置为脚本的参数(并显示它们):
function myfunc {
while read -d $'\0'
do
args="$args $REPLY"
done < /proc/$$/cmdline
set -- $args
shift 2 # Loose the program and script name
echo "$@"
}
简短的回答是“不,我不知道”。
如果必须这样做,我会给脚本参数起别名。
#!/bin/bash
script_args=("$@")
myfunc () {
for a in "$@" ; do
for b in "${script_args[@]}" ; do
echo "$a: $b"
done
done
}
myfunc one two
然后像这样调用:
./myscript.sh 1 2
输出:
one: 1
one: 2
two: 1
two: 2