将可变数量的参数传递给命令

C F*_*her 1 bash

我正在使用FPM来创建Debian软件包,我遇到了一个小问题.我的bash脚本需要5个参数.

TARGET=$1
VERSION=$2
DESCRIPTION=$3
DEPENDENCIES=$4
REVISION=$5
Run Code Online (Sandbox Code Playgroud)

麻烦的是4美元,我把它传给下面的字符串

-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"

双引号在我的字符串中转义,所以当我echo $DEPENDENCIES,引号正确显示.

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

我想做的事情如下:

fpm ...blah blah details... $DEPENDENCIES path
Run Code Online (Sandbox Code Playgroud)

$ DEPENDENCIES应该将多个标志传递给fpm,但它似乎只能识别第一个.如果我手动编写参数,它工作正常,但尝试使用字符串传递参数不起作用.

我不确定是什么.救命?

gle*_*man 8

这将有助于阅读:http://mywiki.wooledge.org/BashFAQ/050

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

#!/bin/bash
TARGET=$1
VERSION=$2
DESCRIPTION=$3
REVISION=$4
shift 4
DEPENDENCIES=( "$@" )
Run Code Online (Sandbox Code Playgroud)

依赖关系是"所有其余的"参数,正确分开.你会像这样调用你的脚本

./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"
Run Code Online (Sandbox Code Playgroud)

在您的脚本中,DEPENDENCIES数组将包含这些元素

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"
Run Code Online (Sandbox Code Playgroud)

在你的脚本中,调用fpm如:

fpm ...blah blah details... "${DEPENDENCIES[@]}" path
Run Code Online (Sandbox Code Playgroud)