2017-02-02 35 views
1

參數從外部傳遞給bash腳本,並在bash文件中讀取。看起來如下:如何在bash腳本中迭代字符串類型的參數?

#following is the point from where the argument is passed to config.sh 
    controller.vm.provision :shell, path: 'shell/config.sh', keep_color: true, privileged: false, :args => ip 

裏面的config.sh讀取參數。參數「ip」有點像下面這樣:

ip = "10.12.153.26" "10.12.153.25" "10.12.153.24" 

現在我想遍歷bash中的上述參數。這樣做如下:

array=($1) //please note $1="10.12.153.26" "10.12.153.25" "10.12.153.24" 
    for i in ${array[@]} 
    do 
     echo $i //it is iterated only once and output is "10.12.153.26" "10.12.153.25" "10.12.153.24" 
    done 

所以我只得到了一次,輸出完整的說法,因爲它是,但我想讓它變得逐個顯示是這樣,我甚至可以單獨使用單一的價值對於一些其他目的。所以,請建議我如何得到這個?

+1

他們是3個獨立的論點? 「$ @」 ; do printf「%s \ n」「$ arg」 ; done'?有什麼問題? – Inian

+1

你是什麼意思'ip =「10.12.153.26」「10.12.153.25」「10.12.153.24」'?運行'declare -p ip'併發布輸出。 –

+0

如果你這樣做的話,你的不同IP將是'$ 1','$ 2'和'$ 3',而不是全部壓在'$ 1'中。然後你可以遍歷'「$ @」'來獲得完整列表。 –

回答

1

如果你想拆就空間的價值,你可以這樣做:

set -- $1 
for i; do 
    echo $i 
done 

如果$i"10.12.153.26" "10.12.153.25" "10.12.153.24", 那麼這將輸出:

"10.12.153.26" 
"10.12.153.25" 
"10.12.153.24" 

要獲得擺脫雙引號,你可以使用參數擴展

set -- $1 
for i; do 
    echo ${i//\"/} 
done 
+0

我怎樣才能得到值「10.12.153.26」 「10.12.153.25」 「10.12.153.24」沒有雙引號橫跨他們,即像第一我得到10.12.153.26然後10.12.153.25,然後其他 – Learner

+0

添加到我的答案 – janos