Доступ к параметру скрипта из функции bash без передачи их по вызову

Есть ли способ получить доступ к параметрам скрипта bash из функции скрипта, если функция не вызывается явно с параметрами скрипта?

Благодарю.

3 ответа

Решение

Нет, но вы можете взломать его, если вы работаете в Linux, прочитав командную строку вашего скрипта из `/proc':

function myfunc {

    while read -d $'\0' 
    do 
        echo "$REPLY"
    done < /proc/$$/cmdline
}

-d $'\0' требуется для чтения файла cmdline, потому что строки имеют нулевой (двоичный ноль) разделитель. В примере $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 "$@"
}

Просто вызовите функцию с аргументами скрипта.

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

foo "$@"

Краткий ответ: "Нет, не то, что я знаю".

Если бы это было сделано, я бы использовал псевдонимы аргументов скрипта.

#!/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
Другие вопросы по тегам