Bash 向命令传递可变数量的参数

Bash 向命令传递可变数量的参数,bash,Bash,我正在使用FPM创建Debian包,但遇到了一个小问题。 我的bash脚本包含5个参数 TARGET=$1 VERSION=$2 DESCRIPTION=$3 DEPENDENCIES=$4 REVISION=$5 麻烦的一个是$4,在这里我传递它下面的字符串 -d“apt传输https>0.8.16~exp12ubuntu10.15”-d“mongodb>1:2.0.4-1ubuntu2”-d“ntp>1:4.2.6.p3+dfsg-1ubuntu3.1” 双引号在我的字符串中转义,因此当我

我正在使用FPM创建Debian包,但遇到了一个小问题。 我的bash脚本包含5个参数

TARGET=$1
VERSION=$2
DESCRIPTION=$3
DEPENDENCIES=$4
REVISION=$5
麻烦的一个是$4,在这里我传递它下面的字符串

-d“apt传输https>0.8.16~exp12ubuntu10.15”-d“mongodb>1:2.0.4-1ubuntu2”-d“ntp>1:4.2.6.p3+dfsg-1ubuntu3.1”

双引号在我的字符串中转义,因此当我
echo$DEPENDENCIES
时,引号会正确显示

FPM使用
-d
标志,可以多次使用,我需要能够将参数列表从脚本传递给FPM

我想做一些类似的事情:

fpm ...blah blah details... $DEPENDENCIES path
$DEPENDENCIES应该将多个标志传递给fpm,但它似乎只识别第一个标志。如果我手动写出参数,效果很好,但是尝试使用字符串来传递参数是行不通的


我不知道发生了什么事。帮助?

这将有助于阅读:

如果我是你,我会重新安排你的参数

#!/bin/bash
TARGET=$1
VERSION=$2
DESCRIPTION=$3
REVISION=$4
shift 4
DEPENDENCIES=( "$@" )
依赖项是参数的“所有其余部分”,正确地分开。您将像这样调用脚本

./script tgt ver "this is the description" rev-1.1.1 -d "apt-transport-https > 0.8.16~exp12ubuntu10.15" -d "mongodb > 1:2.0.4-1ubuntu2" -d "ntp > 1:4.2.6.p3+dfsg-1ubuntu3.1"
在脚本中,依赖项数组将包含这些元素

DEPENDENCIES[0]=-d 
DEPENDENCIES[1]="apt-transport-https > 0.8.16~exp12ubuntu10.15" 
DEPENDENCIES[2]=-d 
DEPENDENCIES[3]="mongodb > 1:2.0.4-1ubuntu2" 
DEPENDENCIES[4]=-d 
DEPENDENCIES[5]="ntp > 1:4.2.6.p3+dfsg-1ubuntu3.1"
在脚本中,调用fpm,如下所示:

fpm ...blah blah details... "${DEPENDENCIES[@]}" path

这将有助于阅读:

如果我是你,我会重新安排你的参数

#!/bin/bash
TARGET=$1
VERSION=$2
DESCRIPTION=$3
REVISION=$4
shift 4
DEPENDENCIES=( "$@" )
依赖项是参数的“所有其余部分”,正确地分开。您将像这样调用脚本

./script tgt ver "this is the description" rev-1.1.1 -d "apt-transport-https > 0.8.16~exp12ubuntu10.15" -d "mongodb > 1:2.0.4-1ubuntu2" -d "ntp > 1:4.2.6.p3+dfsg-1ubuntu3.1"
在脚本中,依赖项数组将包含这些元素

DEPENDENCIES[0]=-d 
DEPENDENCIES[1]="apt-transport-https > 0.8.16~exp12ubuntu10.15" 
DEPENDENCIES[2]=-d 
DEPENDENCIES[3]="mongodb > 1:2.0.4-1ubuntu2" 
DEPENDENCIES[4]=-d 
DEPENDENCIES[5]="ntp > 1:4.2.6.p3+dfsg-1ubuntu3.1"
在脚本中,调用fpm,如下所示:

fpm ...blah blah details... "${DEPENDENCIES[@]}" path

谢谢你,伙计+1为阅读链接。大多数事情我都能应付,但这是我力所不及的。只是为了安静才做了
shift 4>/dev/null
。谢谢你,伙计+1为阅读链接。大多数事情我都能应付,但这是我力所不及的。只为了安静而执行了
shift 4>/dev/null