2015-01-21 56 views
2

我正在寫一個腳本,它需要帶'〜'分隔符的參數,並且在分割字符串之後我想將值插入到數組中。我在這個問題上有不少帖子,我幾乎在那裏,但有一個失敗的情況。這裏是細節。當delim將字符串分割成數組時,不包括最後一個空字符串

myScript.sh

#!/bin/bash 
tmpIFS=$IFS 
IFS="~" 
array=($1) 
IFS=$tmpIFS 
echo "${#array[@]}" 

處決

$ ./myScript.sh "A~B" 
$ 2 

這就是我想要的。但是當我做

$ ./myScript.sh "A~" 
$ 1 

我期待有一個大小爲2的數組再次和最後一個單元格是一個空字符串。

我該如何做到這一點?

我試圖用這個腳本來實現一般的做法是使用curl通過傳遞10個查詢參數來執行一個http請求。我沒有給我的腳本提供10個參數,而是想要將數據作爲一個參數按指定順序由一個字符分隔。

感謝

+0

也許如果你包含更多關於你最終想達到什麼的信息,我們可以給你提供一些替代方案。 – 2015-01-21 11:15:34

+0

@TomFenech更新了問題。 – NikosDim 2015-01-21 11:34:54

+1

將10個參數添加到您的腳本並擁有一個參數但自己將其分開的情況有什麼區別?你只需要執行'./myScript.sh A B'並通過'$ 1'和'$ 2'訪問你的參數。如果你做了'./myScript.sh A''',甚至只是'./myScript.sh A',那麼'$ 2'就是空的。 – 2015-01-21 11:51:40

回答

0

使用./script "A~ "那麼最後一個元素是 「空」。

+0

在這種情況下,它不會是一個空字符串,而是一個空格字符,它不是我想要的。輸入參數將來自其他應用程序,所以有一個空間不適合我。感謝 – NikosDim 2015-01-21 11:12:36

+0

然後可能修剪後訪問元素。我認爲bash不會處理/得到最後一個元素,如果在'./script「A〜」'中沒有。 – 2015-01-21 11:15:42

+0

爲了在最後得到空格字符,我必須在所有看起來不正確的客戶端中添加此登錄名。如果不可能,那麼我將不得不採取完全不同的道路。 :( – NikosDim 2015-01-21 11:21:42

3

~的處理方式與表達式中的空白處理方式相同,因此該行爲對於shell擴展規則有意義。您可以使用以下解決方法:

array=($1"") 

要理解爲什麼這個作品,用空格考慮它(不變IFS):假設$1A B C,然後

array=($1) 

擴展到

array=(A B C) 

這是一個由三個元素組成的數組。在另一方面,

array=($1"") 

擴展到

array=(A B C "") 

它有四個。如果在$1年底沒有空間,這擴展到

array=(A B C"") 

這是一樣的(A B C)一次。

相關問題