2015-05-18 40 views
1

我必須從shell腳本中的數組中替換所有值的空格(「」)。所以,我需要一個數組是這樣的:在bash中替換數組中的空格

$ array[0]="one" 
$ array[1]="two three" 
$ array[2]="four five" 

看起來是這樣的:

$ array[0]="one" 
$ array[1]="two!three" 
$ array[2]="four!five" 

替換每個空格另一個字符有循環或東西,而不是價值變化值。

+0

你的意思是'array [0] = one',也許? 'array [0] = one'不是一個賦值。 –

回答

4
array=('one' 'two three' 'four five') # initial assignment 
array=("${array[@]// /_}")   # perform expansion on all array members at once 
printf '%s\n' "${array[@]}"   # print result 
1
$!/bin/sh 

array=('one' 'two three' 'four five') 

for i in "${!array[@]}" 
do 
    array[$i]=${array[$i]/ /_} 
done 

echo ${array[@]} 
+0

現在好多了,雖然'echo'的使用是不幸的,尤其是使用無引號的參數。 'printf'%q \ n'「$ {array [@]}」'會更有效地證明數組元素之間的界限,因爲'echo'不能直觀地區分具有空格的參數和兩個單獨的參數(並且省略引號意味着在分割字符串的過程中,某個空格會變成多個參數)。 –

+0

好點,你是最簡單的方法來做到這一點,雖然。 – PressingOnAlways

+0

這裏最後一個問題 -/bin/sh shebang不能保證有數組的shell會被用來運行這個腳本。 –

2

Bash shell支持通過替換字符串操作操作來查找和替換。語法如下:

${varName//Pattern/Replacement} 

用替換替換模式的所有匹配。

x=" This is  a  test " 
## replace all spaces with * #### 
echo "${x// /*}" 

你現在應該可以簡單地循環訪問數組,並將空間替換爲任何你想要的。