Csh hinzufügen von strings in ein array, Leerzeichen Probleme
Ich habe Schwierigkeiten, etwas zu tun basic mit csh. Ich habe einen string:
set newCmd = "$expansionCmd –option1 –option2 …"
Bin und ich erstellen eine Reihe von diesen strings, die ich später ausführen wollen:
set expansionCmdList = ($expansionCmdList[*] "$newCmd")
#I also tried without quotes, e.g. just $newCmd
Schließlich versuche ich zu Durchlaufen und führen diese Befehle aus:
foreach exCmd ($expansionCmdList)
`exCmd` #execute it in the shell
end
Aber das problem ist, dass die array-Einträge werden nicht den kompletten string, sondern jeden Teil der Zeichenkette durch ein Leerzeichen getrennt, d.h. der erste Eintrag wird nur "$expansionCmd", der nächste Eintrag wäre "—option1" etc.
Entschuldigen uns im Voraus für die Verwendung der c-shell, mein Unternehmen, die code-Basis ist mit es stecken.
InformationsquelleAutor JDS | 2012-10-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
Jedes mal, wenn Sie bauen ein ganzes array und wollen dessen einzelne Elemente die Identität intakt, Sie müssen die
:q
Modifikator auf den ausbau. Ansonsten, sobald Sie etwas tun, wieset expansionCmdList=($expansionCmdList[*] "$newCmd")
alle vorherigen Befehle in der Liste sind aufgeteilt in Ihre einzelnen Worte, von denen jeder nun sein eigenes array-element. Einfache demonstration:Hoppla, du verhunzt hast das array, bevor Sie sich zu Ihrer Ausführung der Schleife. Die Dinge gehen viel besser mit
:q
:Müssen Sie den gleichen Modifikator in der for-Schleife:
Schließlich
exCmd
` versucht, einen Befehl ausführen, der wörtlich mit dem Namen "exCmd". Was Sie tun möchten, istführen Sie den Wert der Variablen. Sie werden wahrscheinlich führen zu mehr Leerraum leiden hier, und Sie können Sie nicht lösen, indem Sie jedem Befehl ein array da die csh nicht unterstützt arrays von arrays. Faire Warnung. Aber wenn die Befehle nicht jedes Angebot braucht, das funktioniert:
Naja, die einzige nennenswerte verbliebene Grund, nicht zu verwenden, csh, die für scripting ist, die csh ist nicht eine sehr gute scripting-Sprache... durch Dinge wie die Tatsache, dass Sie die twist-Aliase in Knoten, um jede Art von Unterprogramm-Fähigkeit. Aber wenn es das ist, was Sie haben, das ist, was Sie haben. Und es hat-arrays und integrierte arithmetische lange vor der POSIX-shells haben. 🙂
Beachten Sie, dass die Verwendung
${array}:q
wird nicht funktionieren-es muss$arr:q
.natürlich.
${array}:q
ist speziell mit der curlies um zu verhindern, dass die Anwendung des Modifikators und erhalten eine wörtliche:q
im Ergebnis. Wenn Sie verwenden möchten, curlies und immer noch gilt der Modifikator, es ist${array:q}
.InformationsquelleAutor Mark Reed
Mark ' s Lösung ist eindeutig besser für die meisten Anwendungen, aber es ist eine weitere option. Anstelle der Verwendung von
foreach
direkt, die Größe des array und Durchlaufen der Sequenz:(kopiert von Zugriff auf array-Elemente mit Leerzeichen in der TCSH)
InformationsquelleAutor Sean Allred