2

如果没有使用脚本参数显式调用函数,是否有任何方法可以从脚本函数访问 bash 脚本参数?

谢谢。

4

3 回答 3

0

只需使用脚本的参数调用该函数。

foo () {
    for arg in "$@"
    do
        echo "$arg"
    done
}

foo "$@"
于 2012-06-26T11:19:57.750 回答
0

不,但如果你在 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 "$@"
}
于 2012-06-25T12:32:05.787 回答
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
于 2012-06-25T11:53:54.573 回答