如何从bash中的命令参数中删除第n个元素

Man*_*oon 3 bash shift

如何从bash中的参数列表中删除第n个元素?

Shift只显示删除前n个,但我想保留第一个.我想要的东西:

#!/bin/sh
set -x

echo $@

shift (from position 2)

echo $@
Run Code Online (Sandbox Code Playgroud)

所以当我调用它时 - 它会从列表中删除"house":

my.sh 1 house 3
1 house 3
1 3
Run Code Online (Sandbox Code Playgroud)

dev*_*ull 7

使用setbuiltin和shell参数扩展:

set -- "${@:1:1}" "${@:3}"
Run Code Online (Sandbox Code Playgroud)

将删除第二个正面论点.

您可以使用变量使其成为通用的:

n=2   # This variable denotes the nth argument to be removed
set -- "${@:1:n-1}" "${@:n+1}"
Run Code Online (Sandbox Code Playgroud)