如果没有使用脚本参数显式调用该函数,有没有办法从脚本函数访问bash脚本参数?
感谢。
答案 0 :(得分:0)
简短的回答是“不,不是我知道的。”
如果必须这样做,我会为脚本参数添加别名。
#!/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
答案 1 :(得分:0)
不,但如果你是在Linux上,你可以通过从`/ proc'读取脚本的命令行来破解它:
function myfunc {
while read -d $'\0'
do
echo "$REPLY"
done < /proc/$$/cmdline
}
读取cmdline文件需要-d $'\0'
,因为字符串是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 "$@"
}
答案 2 :(得分:0)
只需使用脚本的参数调用该函数。
foo () {
for arg in "$@"
do
echo "$arg"
done
}
foo "$@"