重击:位置参数切片


20

我如何$@在Bash中获得一片,而不必首先将所有位置参数复制到另一个这样的数组中?

argv=( "$@" )
echo "${argv[@]:2}";

1
总是报价"$@"。您argv如果有ARGS包含空格的分配将打破。
jordanm

Answers:


31

您可以使用与其他任何阵列相同的格式。要从中提取第二和第三元素$@,您可以执行以下操作:

echo "${@:1:2}"
          - -
          | |----> slice length
          |------> slice starting index 

1
但这似乎在v4.1.2中逐个字符地工作,是否有办法逐个单词地进行呢?
Alexej Magura

@AlexejMagura我不明白你的意思。这作用于数组的元素。如果您具有一个字符的元素,它将在“字符”上工作。如果每个元素都是一个单词,它将对单词起作用。您是否可能在字符串而不是数组上尝试?
terdon

我正在“ $ @”的副本上尝试使用它,我不确定那时它可能会变成字符串。
Alexej Magura

在bash 4.2.46上,"${@:1:2}"实际上给了我第一第二 命令行参数。同时,"${@:1}"给我完整的命令行参数,并"${@:0}"给我脚本名称,后跟完整的命令行参数
Rockallite

@Rockallite好吧,是的。$@ 数组的第二个和第三个元素是第一个和第二个参数。"${@:1}"从第二个元素(第一个参数)开始打印整个数组,从第一个元素(${@:0}脚本名称)开始打印整个数组。你在期待什么?
terdon
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.