nicht erkannter Modifikator P im ZSH-Skript

nicht erkannter Modifikator P im ZSH-Skript

Ich führe dieses Zsh-Skript aus, erhalte jedoch die folgende Fehlermeldung:

./executable: unrecognized modifier `P'

Der Code des Skripts lautet wie folgt:

#!/bin/zsh

setopt no_unset err_exit pipe_fail

if [[ $# -lt 2 ]]; then
    cat <<EOF
Usage: ${0:t} something1 something2 ..
EOF
    exit 1
fi

foobar=${argv[1]:P}

Ich verstehe, dass dieser Fehler mit der Foobar-Zuweisung zusammenhängt, kann aber nirgends finden, wo diese Pverwendet wird oder warum sie nützlich ist. Irgendwelche Ideen?

Antwort1

Versuchen Sie es eventuell mit

foobar=$(readlink -f ${argv[1]})

Das funktioniert nur, wenn die Datei existiert, was :P jedoch nicht erforderlich ist.

Antwort2

Der :PModifikator wurde in Zsh hinzugefügtVersion 5.3und ist daher in älteren Versionen nicht verfügbar. Ein ähnlicher, aber nicht ganz identischer Ansatz wäre,:Averwenden Sie stattdessen den Modifikator.

Aus zshexpn(1):

Modifikator:a

Wandelt einen Dateinamen in einen absoluten Pfad um: stellt bei Bedarf das aktuelle Verzeichnis voran; entfernt „.“-Pfadsegmente; und entfernt „..“-Pfadsegmente und die Segmente, die ihnen unmittelbar vorangehen.

Modifikator:A

Wandeln Sie einen Dateinamen in einen absoluten Pfad um, wie es der Modifikator „a“ tut, und übergeben Sie das Ergebnis dann an die Bibliotheksfunktion realpath(3), um symbolische Links aufzulösen.

Hinweis: Auf Systemen ohne die Bibliotheksfunktion realpath(3) werden symbolische Links nicht aufgelöst, daher sind auf diesen Systemen „a“ und „A“ gleichwertig.

Hinweis: foo:A und realpath(foo) unterscheiden sich bei einigen Eingaben. Informationen zur Semantik von realpath(foo) finden Sie beim PModifikator.

Modifikator:P

Wandelt einen Dateinamen in einen absoluten Pfad um, wie realpath(3). Der resultierende Pfad ist absolut, hat weder '.'- noch '..'-Komponenten und verweist auf denselben Verzeichniseintrag wie der eingegebene Dateiname.

Im Gegensatz zu realpath(3) sind nicht vorhandene nachstehende Komponenten zulässig und werden beibehalten.

Ich habe einige der eher irrelevanten Details weggelassen. Lesen Sie daher unbedingt die Manpage im Abschnitt „History Expansion“, Unterabschnitt „Modifiers“.

verwandte Informationen