Csh ajouter les chaînes de caractères dans un tableau, les espaces troubles
Je vais avoir du mal à faire quelque chose de fondamental avec les csh. J'ai une chaîne de caractères:
set newCmd = "$expansionCmd –option1 –option2 …"
Et je suis en création d'un tableau de ces chaînes, qui plus tard, je veux l'exécuter:
set expansionCmdList = ($expansionCmdList[*] "$newCmd")
#I also tried without quotes, e.g. just $newCmd
Enfin j'essaie de parcourir et d'exécuter ces commandes:
foreach exCmd ($expansionCmdList)
`exCmd` #execute it in the shell
end
Toutefois, le problème est que le tableau des entrées ne sont pas la chaîne, mais chaque partie de la chaîne de caractères séparés par des espaces, c'est à dire la première entrée est seulement “$expansionCmd”, la prochaine entrée “—option1” etc.
Excuses à l'avance pour l'utilisation de shell c, mon entreprise est le code de base est coincé avec elle.
OriginalL'auteur JDS | 2012-10-31
Vous devez vous connecter pour publier un commentaire.
Tout moment, vous êtes de l'expansion d'un tableau d'ensemble et vous voulez garder ses éléments individuels identité intacte, vous avez besoin de la
:q
modificateur sur l'expansion. Sinon, dès que vous faites quelque chose commeset expansionCmdList=($expansionCmdList[*] "$newCmd")
, toutes les commandes précédentes dans la liste sont divisés en leurs paroles, chacune de, qui est maintenant son propre élément de tableau. Démonstration Simple:Oups, vous avez foiré le tableau avant même d'arriver à l'exécution de votre boucle. Les choses vont beaucoup mieux avec
:q
:Vous devez utiliser le même modificateur dans la boucle for:
Enfin, `
exCmd
` essaie d'exécuter une commande littéralement nommé "exCmd". Ce que vous voulez faire estexécutez la valeur de la variable. Vous aurez probablement courir dans plusieurs espaces malheurs ici, et vous ne pouvez pas les résoudre en faisant de chaque commande d'un tableau csh ne prend pas en charge des tableaux de tableaux. Fair warning. Mais si les commandes n'ont pas de cotation besoins, cela va fonctionner:
Eh bien, le seul restant raison de ne pas utiliser csh pour les scripts, c'est que csh n'est pas un très bon langage de script... à cause de choses comme le fait que vous avez à se tordre les alias dans les nœuds afin d'avoir toute sorte de sous-capacité. Mais si c'est ce que vous avez, c'est ce que vous avez. Et il n'est d'avoir des tableaux et intégré dans l'arithmétique longtemps avant la POSIX obus n'. 🙂
Notez que l'utilisation de
${array}:q
ne fonctionnera pas, il doit être$arr:q
.bien sûr.
${array}:q
est précisément à l'aide de la curlies pour empêcher l'application du modificateur et obtenir un littéral:q
dans le résultat. Si vous souhaitez utiliser des curlies et encore appliquer le modificateur, c'est${array:q}
.OriginalL'auteur Mark Reed
Marc solution est nettement supérieure à la plupart des applications, mais il est une autre option. Au lieu d'utiliser
foreach
directement, obtenir la taille de la matrice et parcourir la séquence:(copié à partir de Accéder aux éléments d'un tableau avec des espaces dans TCSH)
OriginalL'auteur Sean Allred