if ($mystr:q =~ *'\
'*) echo yes
deve funcionar em algumas implementações e versões de csh
(como os csh
e tcsh
encontrados no Debian). Em alguns outros (como o encontrado no Solaris 10), você pode ter mais sorte com
set nl = '\
'
if ($mystr:q =~ *$nl:q*) echo yes
A maioria das pessoas desistiu de tentar escrever scripts confiáveis com csh
até agora. Por que você usaria csh
neste século?
Este código funciona para mim (saídas no
) em tcsh 6.17.00 (Astron) 2009-07-10 (x86_64-unknown-linux) options wide,nls,dl,al,kan,rh,color,filec
set mystr = '1234ABC\
-------\
FOOBAR'
if ($mystr:q !~ *'\
'*) then
echo yes
else
echo no
endif
Observe que, se você fizer isso:
set var = 'some command'
csh
armazena cada palavra (separada em branco) da saída de some command
em vários elementos da matriz var
.
Com:
set var = "'some command'"
armazena cada linha não vazia em elementos da matriz.
Parece que não é possível 1 armazenar a saída de um comando inteiro em uma variável em (t)csh
, então sua única opção seria:
set var = "'some command'" # note that it removes the empty lines
if ($#var == 1)...
1 Estritamente falando, isso não é verdade, pode-se fazer algo como:
set x = "'some command | paste -d. /dev/null -'"
set var = ""
set nl = '\
'
foreach i ($x:q)
set i = $i:s/.//:q
set var = $var:q$i:q$nl:q
end
(claro, pode não funcionar em todas as implementações / versões csh
)