Não sei ao certo como você deseja inserir a string. Isso tem o efeito que você deseja alcançar, mas pode precisar ser modificado de acordo com a entrada da string:
aa() { echo $3 ; } ; aa "abcd efgh" "ijkl mnop" "qrst uvwxyz"
Edit: Então, se estiver na variável (tem que ser definido com aspas "):
AA="\"abcd efgh\" \"ijkl mnop\" \"qrst uvwxyz\""
echo $AA
então:
FIRST='echo $AA| awk -F \" '{print $2}''
SECOND='echo $AA| awk -F \" '{print $4}''
THIRD='echo $AA| awk -F \" '{print $6}''
echo $FIRST : $SECOND : $THIRD
como jasonwryan apontou acima. Você disse, você queria usar sed, mas isso torna desnecessário complexo:
FIRST='echo $AA| sed 's/^\"\([^\"]*\)\".*//''
SECOND='echo $AA| sed 's/^\"[^\"]*\" \"\([^\"]*\)\".*//''
THIRD='echo $AA| sed 's/^\"[^\"]*\" \"[^\"]*\" \"\([^\"]*\)\".*//''
Edit2: Na verdade, é possível alcançar completamente sem sed, awk, perl, .. apenas com bash, usando sua função de "leitura" embutida como essa (os ecos são para depuração):
#!/bin/bash
aa() {
echo '$1'="$1"
IFS=\" read aaa FIRST bbb SECOND ccc THIRD ddd <<< "$1"
echo FIRST=$FIRST : SECOND=$SECOND : THIRD=$THIRD
}
AA="\"abcd efgh\" \"ijkl mnop\" \"qrst uvwxyz\""
echo '$AA'="$AA"
aa "$AA"