Generierung von Dateinamen aus einer Variablen in zsh ohne spawning subshell

337
sasquires

In zsh habe ich ein Glob-Muster in einer Variablen, und ich möchte eine andere Variable definieren, die die Dateinamengenerierung für dieses Muster durchführt. Gibt es eine Möglichkeit, dies zu tun, ohne eine Subshell zu erzeugen?

Folgendes funktioniert nicht:

x=foo* y=$~x 

Natürlich kann ich das machen

x=foo* y=$(echo $~x) 

und das reguläre Beendigungsverhalten setzt ein. Aber das Ziel dieser Frage ist es, zu vermeiden, dass eine Subshell erzeugt wird, was scheinbar unnötig sein sollte.

Diese Frage wurde in den letzten Tagen auf stackoverflow.com nicht beantwortet, daher dachte ich, ich würde versuchen, hier zu fragen.

3
Versuchen Sie es besser mit [Unix & Linux] (https://unix.stackexchange.com/), falls Sie auch hier nicht viele Antworten erhalten. Tomasz vor 5 Jahren 0

1 Antwort auf die Frage

2
mpy

Wenn Sie yein Array erstellen, wird der Parameter $xerweitert:

$ x=foo* $ y=($~x) $ print -l $y foo1 foo2 

Wenn Sie eine einzelne Zeichenfolge wünschen, verknüpfen Sie die Werte des Arrays mit Leerzeichen:

$ ys=${(j: :)y} $ print -l $ys foo1 foo2 
Dies ist definitiv die beste Idee, die ich bisher gehört habe. Ich habe auf eine Antwort auf eine weitergehende Frage als auf meine ursprüngliche Frage gehofft, die lauten würde: "Wie können wir diese Erweiterung ohne zusätzliche Arbeit tun?" Dies stellt jedoch die ursprüngliche Frage definitiv zufrieden, indem keine Subshell erzeugt wird. Vielen Dank! sasquires vor 5 Jahren 0