簡體   English   中英

如何丟棄args並保持bash傳遞下去?

[英]How to drop args and pass remain down in bash?

我要實現此功能,它將刪除shell args $ @的第一個元素,並將其余args傳遞給另一個函數。 如果我傳遞3個元素:“ 1 2”,“ 2 3”,“ 3 4”,它將刪除“ 1 2”,並傳遞2個元素:“ 2 3”和“ 3 4”到另一個函數,該函數將接收兩個參數:“ 2 3”和“ 3 4”。

我不知道該怎么做,似乎一旦將其轉換為字符串,就永遠無法正確地將其轉換回去?

有什么建議么?

#!/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.

這是一種不使用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")'

使用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=

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM