さまざまな方法で配列に文字列を挿入する方法

さまざまな方法で配列に文字列を挿入する方法

以下のような文字列があります。 str = '014387650'これで、この文字列を以下のように分割して値を配列に入れたいと思います。

A[0]=0  
A[1]=01  
A[2]=014  
A[3]=0143  
A[4]=01438  
A[5]=014387  
A[6]=0143876  
A[7]=01438765  
A[8]=014387650  

答え1

次の事項を適用する必要がありますbash

str='014387650'
arr=()
for ((i=0; i<${#str}; i++)); do
    arr+=("${arr[i-1 < 0 ? 0 : i-1]}${str:$i:1}")
done

結果:

$ printf '<%s>\n' "${arr[@]}"
<0>
<01>
<014>
<0143>
<01438>
<014387>
<0143876>
<01438765>
<014387650>

答え2

配列の明示的な宣言は、組み込み宣言を使用して実行されます。

  declare -a ARRAYNAME 

配列変数は、次の形式の複合割り当てを使用して作成することもできます。

  ARRAY=(value1 value2 ... valueN) 

あなたの場合:

  #!/bin/bash
  str='014387650'
  declare -a A
  for (( c=0; c<${#str}; c++ ))
  do
    A[c]=`echo ${str:0:$(( $c + 1 ))}`
    echo "A[$c]="${A[$c]} 
  done

出力:

   A[0]=0
   A[1]=01
   A[2]=014
   A[3]=0143
   A[4]=01438
   A[5]=014387
   A[6]=0143876
   A[7]=01438765
   A[8]=014387650

文字列を配列に入れるには:

   declare -a A
   str=014387650
   A=${str[*]}
   echo ${A[*]}
   014387650
   echo ${A[3]}
   4

答え3

他の方法:

triangle_split() {
  _len=1
  while [ "$_len" -le "${#1}" ]; do
    printf '%.*s\n' "$_len" "$1"
    : "$((_len+=1))"
  done
}

IFS='
'
A=($(triangle_split 014387650))

printf '%s\n' "${A[@]}"

答え4

次のことができます。

set --; src=014387650 OPTIND=1 tgt=
while   getopts : na -"$src"
do      tgt=$tgt$OPTARG
        set "$@" "A[$#]=$tgt"
done;   printf   %s\\n "$@"

A[0]=0
A[1]=01
A[2]=014
A[3]=0143
A[4]=01438
A[5]=014387
A[6]=0143876
A[7]=01438765
A[8]=014387650

関連情報