我在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,所有这些也可能有包含空格的问题..)
答案 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[@]}"