[英]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.