Анализ вывода результата "ls -l" для получения пользователя и группы в QNX

Расширение $@вlocal args="$@"является неуказанным стандартом POSIX . Оболочка bashсоздаст одну строку с разделителями -, содержащую все позиционные параметры, в качестве значения переменной args, а dashпопытается выполнитьlocal args="$1" "$2" "$3"(и т. д.)

Оболочки zshи kshведут себя так же, как bash(, создавая одну строку из позиционных параметров, хотя zshбудет использовать первый символ $IFSв качестве разделителя ), а yashоболочка ведет себя как dash, по крайней мере, в своих конфигурациях по умолчанию.

В вашем случае следует использовать

my_func () {
    local args
    args="$*"

    printf 'args: <%s>\n' "$args"
}

или

my_func () {
    local args="$*"

    printf 'args: <%s>\n' "$args"
}

Здесь я использую $*, чтобы было очевидно, что я создаю одну строку из списка значений. Строка будет содержать значения позиционных параметров, разделенных первым символом$IFS(пробелом по умолчанию ).

Я также использую printf, чтобы быть уверенным в правильности вывода значений, предоставленных пользователем -(см. Почему printf лучше, чем echo?).

Кроме того, ваш сценарий должен использовать #!/bin/dashв качестве первой строки, а не #!/bin/sh, поскольку localявляется расширением стандартного синтаксиса sh.

1
13.08.2021, 13:52
0 ответов

Теги

Похожие вопросы