使用包含空格的命令参数构造变量

时间:2017-02-14 14:46:32

标签: bash

我在bash脚本中有以下内容

COUNTRY="$(findcountry /data/list.tab)"
PARAMS="--name=Test"
PARAMS="$PARAMS --country=$COUNTRY"
./program $PARAMS

如果$(findcountry /data/list.tab)返回,例如墨西哥没有问题。 但如果它返回美国,那就是因为空间问题。

在这种情况下调用"程序"有3个参数,因为其中一个参数包含一个空格。喜欢这样叫:

./program '--name=Test' '--country=United' 'States'

程序不理解这一点,它希望只有2个参数,比如。

./program '--name=Test' '--country=United States'

我该如何解决这个问题?

(请注意,4行bash脚本只是一个很大的简化,有很多参数比我在这里显示的2更多,我添加到我的$ PARAMS,所有这些也可能有包含空格的问题..)

2 个答案:

答案 0 :(得分:2)

使用数组;这就是他们的目标。

COUNTRY="$(findcountry /data/list.tab)"
PARAMS=( "--name=Test" )
PARAMS+=("--country=$COUNTRY")
./program "${PARAMS[@]}"

答案 1 :(得分:1)

如果字符串未加引号使用,则会将其拆分为IFS的值 这是你想用来分隔两个参数的东西。

适用于两个参数的非常简单的解决方案是:

country="$(findcountry /data/list.tab)"
params="--name=Test"
./program "$params" "--country=$country"

对于更多参数,您应该使用数组变量+=

country="$(findcountry /data/list.tab)"
params+=("--country=$country")
params+=("--name=Test")

./program "${params[@]}"