2017-02-14 43 views
1

我已中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中,所有這些也可能存在包含空白的問題。 )

回答

1

使用數組;這是他們的目標。

COUNTRY="$(findcountry /data/list.tab)" 
PARAMS=("--name=Test") 
PARAMS+=("--country=$COUNTRY") 
./program "${PARAMS[@]}" 
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[@]}"