Bash

僅使用 bash 將單個字元串拆分為字元數組

  • January 18, 2020

我想僅使用 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[@]}"

引用自:https://unix.stackexchange.com/questions/197265