次の文字列がありますtest_var=ab_c_de_fg_.txt
。ab_c
1つの変数(2番目の前の文字_
)とde_fg_
2番目の変数(2番目の_
後ろと前の文字)に保存.txt
する必要があります。
test_var=ab_c_de_fg_.txt
for ((i=0;i<{#test_var};i++))
do
a[$i]="${var:$i:1}"
done
flag=0
temp=0
while [["$temp" -le "${#test_var}"]]
do
if a[temp] -eq "_" && flag -eq 0
flag = 1
continue
fi
if a[temp] -eq "_" && flag -eq 1
#var1=arr[0] to arr[$(temp-1)]
#var2=arr[$(temp+1)] to arr[#(test_var)]
fi
temp=$((temp+1))
done
私はシェルスクリプトに初めて触れますのでご案内ください。ありがとうございます。
ベストアンサー1
文字列を配列に分割するには、分割+グローブ演算子(リストのコンテキストで引用符で囲まれていない引数拡張を保持するときに呼び出されます)を使用できます。
test_var=ab_c_de_fg_.txt
root_name=${test_var%.*} # remove extension
IFS=_ # split on _
set -o noglob # disable glob part
array=( $root_name"" ) # split+glob, preserve empty trailing element if any
typeset -p array
これにより、次のような内容が表示されます。
typeset -a array=(ab c de fg '')
配列の要素を最初の文字(kshのバイト)に関連付けるには、次の手順を実行する$IFS
必要があります"${array[*]}"
。
だから:
printf '%s\n' "${array[*]:0:2}" "${array[*]:2}"
出力されます:
ab_c
de_fg_
両方の変数は次のように定義できます。
first_part="${array[*]:0:2}" second_part="${array[*]:2}"