Não, as strings aqui não estão disponíveis em ksh88
e pdksh
. No mais recente ksh93
(original AT & T Korn Shell) e mksh
(atualmente ativamente desenvolvido pdksh
derivativo) está, no entanto, disponível.
<<<
é uma das extensões de shell "modernas" compartilhadas entre ksh93
, mksh
, GNU bash
e zsh
.
Seu problema específico ...
read A B C <<< $line
… pode ser trabalhado com isso (shell Korn):
print -r -- $line |&
read -p A B C
Você também pode usar este (shell POSIX), mas tem pena de desempenho tffile (por outro lado, <<<
provavelmente também tem isso):
read A B C <<EOF
$line
EOF
Se você quiser apenas dividir as palavras:
set -A arrname -- $line
Em seguida, use ${arrname[0]}
em vez de $A
e ${arrname[1]}
em vez de $B
. Apenas não será interrompido a divisão em três elementos, portanto, se $line
for " foo bar baz bla
", $C
conterá "baz bla", enquanto ${arrname[2]}
terá "baz" e ${arrname[3]}
terá "bla".
Se você não precisa dos seus parâmetros posicionais, você pode fazer
set -- $line
A=$1; shift
B=$1; shift
C=$*
O shift
causará erros se $line
tiver menos de três palavras (verifique $#
se não tiver certeza ou use [[ $line = *' '*' '[! ] ]]
(provavelmente mais lento) para verificar primeiro).
Lembre-se que set … $line
também fará globbing (obrigado Stéphane por nos lembrar), então você precisa de set -o noglob
antes (e possivelmente restaurar o estado anterior depois, geralmente set +o noglob
).
Divulgação completa: sou o desenvolvedor mksh
.