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

时间:2013-10-16 00:32:36

标签: bash

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

TARGET=$1
VERSION=$2
DESCRIPTION=$3
DEPENDENCIES=$4
REVISION=$5

麻烦的是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

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

我不确定是什么。帮助

1 个答案:

答案 0 :(得分:8)

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

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

#!/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数组将包含这些元素

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