Le problème est que vous faites:
set x = [some string with shell globbing characters]
Cela ne fonctionnera pas pour la même raison que set x = foo
œuvres, mais set x = [foo]
ne fonctionne pas. Vous devez utiliser set x = "[foo]"
(ou '[foo]'
) pour échapper aux caractères spéciaux de globalisation de coque ([
et ]
dans ce cas).
L'imbrication de citations dans le shell C est assez difficile, et c'est l'une des raisons it's generally discouraged to use the C shell for scripting. C'est peut-être possible pour votre commande, mais je ne suis pas assez intelligent (ou trop paresseux) pour comprendre comment. Ma solution est généralement pour définir la variable noglob
spéciale pour empêcher l'expansion des caractères jokers:
set noglob
foreach line ("`cat test`")
set x = `echo "$line" | awk '{split($0, b, " "); print b[1]}'`
echo "$x"
end
sorties:
How
Stack[7]
Put
post-scriptum Il y a un moyen plus facile de faire écho au premier mot de chaque ligne; mettez-le dans une liste:
set noglob
foreach line ("`cat test`")
set x = ($line)
echo "$x[1]"
end
Merci. Les deux solutions fonctionnent pour moi. –