从bash函数访问脚本参数而不在调用时传递它们

时间:2012-06-25 11:37:03

标签: bash bash-function

如果没有使用脚本参数显式调用该函数,有没有办法从脚本函数访问bash脚本参数?

感谢。

3 个答案:

答案 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 "$@"