次の文字列があります
Delete :xna.del|mode:Full|Execution: loaded
3つのパラメータに出力を保存する必要があります。例えば
a=xna.del
b=Full
c=loaded
答え1
zsh
代わりに、を使用してbash
結果を連想配列に保存します。
$ string='Delete :xna.del|mode:Full|Execution: loaded'
$ IFS=':|'
$ set -o extendedglob
$ typeset -A field=( ${=string//[[:space:]]#:[[:space:]]#/:} )
$ typeset -p field
typeset -A field=( [Delete]=xna.del [Execution]=loaded [mode]=Full )
$ print -r -- $field[mode]
Full
答え2
それでは、「:」の前の単語はあなたとは何の関係もないようです。
すべての値の配列を使用してこのソリューションを試してください。
#!/usr/bin/env bash
TEXT="Delete :xna.del|mode:Full|Execution: loaded"
MYVAR=( $(tr '|' '\n' <<< "${TEXT}" |cut -d: -f2) )
#Checks on the result
echo MYVAR has "${#MYVAR[@]}" entries
#single-Access
echo "${MYVAR[0]}"
echo "${MYVAR[1]}"
echo "${MYVAR[2]}"
#formated output
printf "\t%s\n" "${MYVAR[@]}"
#iterate again to work with it?
for value in "${MYVAR[@]}"; do echo "$value"; done