如何丢弃args并传递在bash中?

时间:2015-07-16 06:42:36

标签: bash

我想实现这个函数,它将删除shell args $ @的第一个elem,并将retain args传递给另一个函数。 如果我通过3个元素:“1 2”,“2 3”,“3 4” 它将丢弃“1 2”,并将2个elems:“2 3”和“3 4”传递给另一个函数,该函数将接收两个参数:“2 3”和“3 4”。

我不知道如何做到这一点,似乎一旦我将其转换为字符串,我永远无法将其正确转换回来?

有什么建议吗?

3 个答案:

答案 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=