Использование sed
для удаления существующих цифр в начале каждой строки и nl
для нумерации строк особым образом:
$ sed 's/^[0-9]*//' file | nl -n rz -s '' -w 5
00001abc
00002def
00003ghi
00004jkl
00005mno
00006pqr
00007stu
00008vwx
00009yza
00010bcd
Опция nl
запрашивает нулевые -заполненные числа (-n rz
, что также правильно -выравнивает числа, но здесь это неважно )без разделителя между номерами строк и данными (-s ''
). Числа состоят из пяти цифр(-w 5
).
$0
не является позиционным параметром, это не часть $@
, это имя скрипта/функции. $*
, $@
и $argv
— это один и тот же нормальный (не -разреженный )массив позиционных параметров, и все индексы массива начинаются с 1 в zsh, если вы не включите параметр ksharrays
.
Но если вы включите опцию ksharrays
для индексов массива, чтобы они начинались с 0, вы заметите, что $argv[0]
или ${@[0]}
— это первый позиционный параметр:$1
.
Ваша путаница может быть связана с массивами ksh93 -, такими как оболочки (, включая bash
), где ${@:0:1}
— это $0
, хотя расширение "$@"
не включает $0
. Эта путаница является результатом того, что Korn решил, что индексы массива его оболочки начинаются с 0, хотя оболочка Bourne, на которой он основан, и большинство других оболочек и инструментов, используемых оболочкой, предпочли, чтобы их индексы массива начинались с 1.
Подробнее об этом в Есть ли причина, по которой первый элемент массива Zsh индексируется 1 вместо 0?