如何从bash中的参数列表中删除第n个元素?如何从bash中的命令参数中删除第n个元素
Shift只显示删除第一个n,但我想保留一些第一个。我想是这样的:
#!/bin/sh
set -x
echo [email protected]
shift (from position 2)
echo [email protected]
所以,当我把它 - 它从列表中删除 “房子”:
my.sh 1 house 3
1 house 3
1 3
如何从bash中的参数列表中删除第n个元素?如何从bash中的命令参数中删除第n个元素
Shift只显示删除第一个n,但我想保留一些第一个。我想是这样的:
#!/bin/sh
set -x
echo [email protected]
shift (from position 2)
echo [email protected]
所以,当我把它 - 它从列表中删除 “房子”:
my.sh 1 house 3
1 house 3
1 3
使用set
内置和shell parameter expansion:
set -- "${@:1:1}" "${@:3}"
将消除第二个主要论点。如果有人知道如何以更好的方式,我所有的耳朵做
n=2 # This variable denotes the nth argument to be removed
set -- "${@:1:n-1}" "${@:n+1}"
从未使用变量'a'和'b'? –
@FelixFrank我修复了我认为是一个错字;这个想法是将前两个参数从'$ @'中移出并分解成单独的参数。 – chepner
哦,对 - 但我猜,输出中应该省略“$ b”。 –
如果你想使用bash,那么你可以使用一个bash数组
#!/bin/bash
arg=($0 [email protected])
,或者如果您不需要参数$ 0
arg=([email protected])
# argument to remove
rm_arg=2
arg=(${arg[@]:0:$rm_arg} ${arg[@]:$(($rm_arg + 1))})
echo ${arg[@]}
现在,而不是引用$1
你可以使用${arg[1]}
。
请记住,bash参数有一个参数$0
和bash数组有一个元素[0]
。因此,如果您没有将bash参数$ 0分配给bash数组的第一个元素[0]
,那么您将在您的bash数组[0]
中找到bash参数$1
。
+1; '((...))'不是严格需要的,因为索引默认在算术语境中进行评估。 – mklement0
不只是似乎:)从手册页:“长度和偏移量是算术表达式” – chepner
@ mklement0谢谢,你是正确的。摆脱了那些多余的“((...))”。 – devnull