2014-05-14 56 views

回答

5

使用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}" 
+1

+1; '((...))'不是严格需要的,因为索引默认在算术语境中进行评估。 – mklement0

+1

不只是似乎:)从手册页:“长度和偏移量是算术表达式” – chepner

+0

@ mklement0谢谢,你是正确的。摆脱了那些多余的“((...))”。 – devnull

1
a=$1 
shift; shift 

echo $a [email protected] 

你可以使它通用通过使用变量!

+0

从未使用变量'a'和'b'? –

+0

@FelixFrank我修复了我认为是一个错字;这个想法是将前两个参数从'$ @'中移出并分解成单独的参数。 – chepner

+0

哦,对 - 但我猜,输出中应该省略“$ b”。 –

0

如果你想使用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

相关问题