Но, похоже, это работает на принципах символ за символом в v4.1.2, есть ли способ сделать это слово за словом?
Алексей Магура
@AlexejMagura Я не понимаю, что вы имеете в виду. Это действует на элементы массива. Если у вас есть односимвольные элементы, он будет работать «на символах». Если каждый элемент является словом, он работает над словами. Возможно, вы пытаетесь это на строку, а не массив?
Тердон
Я пытаюсь создать копию "$ @", которая, я думаю, в этот момент может стать строкой, я не уверен.
Алексей Магура
На bash 4.2.46 "${@:1:2}"фактически дает мне 1-й и 2-й аргументы командной строки . Между тем, "${@:1}"дает мне полные аргументы командной строки и "${@:0}"дает имя сценария, за которым следуют полные аргументы командной строки .
Rockallite
@ Хорошо, да. 2-й и 3-й элементы $@ массива являются 1-м и 2-м аргументами. "${@:1}"напечатает весь массив, начиная со 2-го элемента (1-й аргумент), и ${@:0}весь массив, начиная с 1-го элемента, который является именем скрипта. Чего ты ожидал?
"$@"
. Вашеargv
назначение будет нарушено, если какие-либо аргументы будут содержать пробелы.Ответы:
Вы можете использовать тот же формат, что и для любого другого массива. Чтобы извлечь 2-й и 3-й элементы
$@
, вы должны сделать:источник
"${@:1:2}"
фактически дает мне 1-й и 2-й аргументы командной строки . Между тем,"${@:1}"
дает мне полные аргументы командной строки и"${@:0}"
дает имя сценария, за которым следуют полные аргументы командной строки .$@
массива являются 1-м и 2-м аргументами."${@:1}"
напечатает весь массив, начиная со 2-го элемента (1-й аргумент), и${@:0}
весь массив, начиная с 1-го элемента, который является именем скрипта. Чего ты ожидал?