
以下のような文字列があります。 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