我想实现这个函数,它将删除shell args $ @的第一个elem,并将retain args传递给另一个函数。 如果我通过3个元素:“1 2”,“2 3”,“3 4” 它将丢弃“1 2”,并将2个elems:“2 3”和“3 4”传递给另一个函数,该函数将接收两个参数:“2 3”和“3 4”。
我不知道如何做到这一点,似乎一旦我将其转换为字符串,我永远无法将其正确转换回来?
有什么建议吗?
答案 0 :(得分:3)
实施例
#!/bin/bash
shift
func "$@"
文档
$ help shift
shift: shift [n]
The positional parameters from $N+1 ... are renamed to $1 ... If N is
not given, it is assumed to be 1.
答案 1 :(得分:2)
这是一种不使用shift
的方法,因此可以保持原始的$@
。
首先,让我们从bash
创建一个$@
数组:
args=("$@")
现在,让我们删除第一个元素:
unset args[0]
我们现在可以使用除第一个参数之外的所有内容调用另一个脚本:
other_script "${args[@]}"
让我们创建一个bash
数组:
$ args=( "1 2" "2 3" "3 4" )
让我们确认我们有我们期望的数组:
$ declare -p args
declare -a args='([0]="1 2" [1]="2 3" [2]="3 4")'
现在,让我们删除第一个元素:
$ unset args[0]
让我们验证第一个参数已被删除:
$ declare -p args
declare -a args='([1]="2 3" [2]="3 4")'
答案 2 :(得分:0)
使用shift命令。对于例如如果我的脚本(以下摘录)我将1 2 3
作为位置参数传递:
echo “arg1= $1 arg2=$2 arg3=$3”
shift
echo “arg1= $1 arg2=$2 arg3=$3”
shift
echo “arg1= $1 arg2=$2 arg3=$3”
Output:
arg1= 1 arg2=2 arg3=3
arg1= 2 arg2=3 arg3=
arg1= 3 arg2= arg3=