Bash
僅使用 bash 將單個字元串拆分為字元數組
我想僅使用 bash 將其拆分
'hello'
為h e l l o
一個數組,我可以在 sed 中執行此操作,sed 's/./& /g'
但是當我不知道分隔符是什麼或分隔符是任何時,我想知道如何將字元串拆分為 Bash 中的數組單個字元。我認為${i// /}
沒有一些創造力就無法使用,因為分隔符是未知的,而且我認為該表達式不接受正則表達式。我嘗試使用 BASH_REMATCH$$ [ string =~ ([a-z $$.).* ]] 但它不像我預期的那樣工作。僅使用 bash 來完成某種
string.split()
行為的正確方法是什麼?原因是我試圖在所有 bash 中編寫 rev 實用程序:while read data; do word=($(echo $data|tr ' ' '_'|sed 's/./& /g')) new=() i=$((${#word[@]} - 1)) while [[ $i -ge 0 ]]; do new+=(${word[$i]}) (( i-- )) done echo ${new[@]}|tr -d ' '|tr '_' ' ' done
但是我使用了 tr 和 sed,我想知道如何正確地進行拆分,然後我會將其修復為全部 bash。只是為了好玩。
s="hello" declare -a a # define array a for ((i=0; i<${#s}; i++)); do a[$i]="${s:$i:1}"; done declare -p a # print array a in a reusable form
輸出:
聲明 -aa='([0]="h" [1]="e" [2]="l" [3]="l" [4]="o")'
或(請注意評論)
s="hello" while read -n 1 c; do a+=($c); done <<< "$s" declare -p a
輸出:
聲明 -aa='([0]="h" [1]="e" [2]="l" [3]="l" [4]="o")'
要將字元串拆分為字元數組,使用空分隔符,您可以:
str='hello' arr=() i=0 while [ "$i" -lt "${#str}" ]; do arr+=("${str:$i:1}") i=$((i+1)) done printf '%s\n' "${arr[@]}"
使用 null 以外的分隔符,您可以:
set -f str='1,2,3,4,5' IFS=',' arr=($str) printf '%s\n' "${arr[@]}"