从某些参数开始连接 cmd 行

从某些参数开始连接 cmd 行

如果我收到如下命令行:

myscript param1 param2 param3 param4 param5 param6 ... (so on)

我如何保存由从某个特定参数开始的参数组成的字符串?$@ 为我提供了连接起来的整个命令行。我需要的是获取以“param4 param5 param6 ... (等等)”开头的字符串。

答案1

你必须通过以下方式消除无趣的论点:

shift 3

答案2

您可以使用数组切片的变体来执行此操作:

args1to3="${*:1:3}"  # Three arguments starting from $1
args4on="${*:4}"     # The arguments starting from $4

顺便说一句,这可能不是你想要的,因为它只是把参数粘在一起,并在它们之间留出空格;如果任何参数也包含空格,它会忘记哪些空格在参数内部,哪些空格在参数之间(参见Bash常见问题解答#50)。如果您希望能够保持它们的直线性,请改用数组:

args1to3=("${@:1:3}")   # Three arguments starting from $1, as an array
args4on=("${@:4}")      # The arguments starting from $4, as an array

othercmd "${args1to3[@]}"             # Pass the first 3 arguments intact
for somearg in "${args4on[@]}"; do    # Process args 4 on, one at a time
  othercmd2 "$somearg"
done

相关内容