Как я могу пропустить первый аргумент в функции оболочки ash/dash?

В функции ash/dash я могу обратиться к полному списку параметров следующим образом:

allparameters() { echo "$@"; }

Что дает мне:

$ allparameters yyyyy abffcd efgh
yyyyy abffcd efgh

Я хочу пропустить yyyyy, поэтому попробовал ${@:2}:

butlast() { echo "${@:2}"; }

Однако это пропускает первые два символа:

$ butlast yyyyy abffcd efgh
yyy abffcd efgh
$ butlast abffcd efgh
ffcd efgh

Мне не удалось найти синтаксис двоеточия в справочной странице для ash, поэтому это может быть башизмом. Что такое эквивалент?


person Aankhen    schedule 26.03.2019    source источник
comment
Похоже, что ash применяет : к одной строке, сформированной из позиционных аргументов, а не к массиву аргументов. Не уверен, что это ошибка или ожидаемое (но недокументированное) поведение. В dash это просто плохая ошибка замены.   -  person chepner    schedule 26.03.2019
comment
Интересный. Спасибо за контекст.   -  person Aankhen    schedule 26.03.2019


Ответы (1)


${name:offset} - это bashизм, но вы можете использовать команду POSIX shift для того, что хотите.

$ butlast() { shift; echo "$@"; }
$ butlast foo bar baz
bar baz
person chepner    schedule 26.03.2019