我必須從shell腳本中的數組中替換所有值的空格(「」)。所以,我需要一個數組是這樣的:在bash中替換數組中的空格
$ array[0]="one"
$ array[1]="two three"
$ array[2]="four five"
看起來是這樣的:
$ array[0]="one"
$ array[1]="two!three"
$ array[2]="four!five"
替換每個空格另一個字符有循環或東西,而不是價值變化值。
我必須從shell腳本中的數組中替換所有值的空格(「」)。所以,我需要一個數組是這樣的:在bash中替換數組中的空格
$ array[0]="one"
$ array[1]="two three"
$ array[2]="four five"
看起來是這樣的:
$ array[0]="one"
$ array[1]="two!three"
$ array[2]="four!five"
替換每個空格另一個字符有循環或東西,而不是價值變化值。
array=('one' 'two three' 'four five') # initial assignment
array=("${array[@]// /_}") # perform expansion on all array members at once
printf '%s\n' "${array[@]}" # print result
$!/bin/sh
array=('one' 'two three' 'four five')
for i in "${!array[@]}"
do
array[$i]=${array[$i]/ /_}
done
echo ${array[@]}
現在好多了,雖然'echo'的使用是不幸的,尤其是使用無引號的參數。 'printf'%q \ n'「$ {array [@]}」'會更有效地證明數組元素之間的界限,因爲'echo'不能直觀地區分具有空格的參數和兩個單獨的參數(並且省略引號意味着在分割字符串的過程中,某個空格會變成多個參數)。 –
好點,你是最簡單的方法來做到這一點,雖然。 – PressingOnAlways
這裏最後一個問題 -/bin/sh shebang不能保證有數組的shell會被用來運行這個腳本。 –
Bash shell支持通過替換字符串操作操作來查找和替換。語法如下:
${varName//Pattern/Replacement}
用替換替換模式的所有匹配。
x=" This is a test "
## replace all spaces with * ####
echo "${x// /*}"
你現在應該可以簡單地循環訪問數組,並將空間替換爲任何你想要的。
你的意思是'array [0] = one',也許? 'array [0] = one'不是一個賦值。 –