/ / nicht erkannter Modifikator P im zsh-Skript - zsh

nicht erkannter Modifikator P im zsh-Skript - zsh

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 Zuweisung der Fu├čleiste zu tun hat, aber ich kann nirgends finden, wo dies ist P wird verwendet, noch warum es n├╝tzlich ist. Irgendwelche Ideen?

Antworten:

0 f├╝r Antwort Ôäľ 1

Versuchen Sie m├Âglicherweise, durch zu ersetzen

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

Das funktioniert nur, wenn die Datei existiert, was: P nicht ben├Âtigt.


0 f├╝r Antwort Ôäľ 2

Das :P Modifikator wurde in Zsh hinzugef├╝gt Version 5.3und ist daher in ├Ąlteren Versionen nicht verf├╝gbar. Ein ├Ąhnlicher, aber nicht ganz identischer Ansatz w├Ąre zu benutze die :A Modifikator statt.

Von zshexpn(1):

Modifikator :a

Verwandle einen Dateinamen in einen absoluten Pfad: Stellt bei Bedarf das aktuelle Verzeichnis voran; L├Âschen "." Pfadsegmente; und entfernen Sie die Pfadsegmente ".." und die unmittelbar davor liegenden Segmente.

Modifikator :A

Verwandeln Sie einen Dateinamen in einen absoluten Pfad, wie es der Modifikator "a" tut, und ├╝bergeben Sie das Ergebnis dann ├╝ber die Bibliotheksfunktion realpath (3), um symbolische Verkn├╝pfungen aufzul├Âsen.

Hinweis: Auf Systemen ohne Realpath (3) -Bibliotheksfunktion werden symbolische Verkn├╝pfungen nicht aufgel├Âst. Auf diesen Systemen sind "a" und "A" also gleichwertig.

Hinweis: foo: A und realpath (foo) unterscheiden sich bei einigen Eing├Ąngen. F├╝r die Realpath (foo) Semantik siehe P Modifikator.

Modifikator :P

Verwandle einen Dateinamen in einen absoluten Pfad, wie zum Beispiel realpath (3). Der resultierende Pfad ist absolut, hat weder "." noch ".." - Komponenten und verweisen auf denselben Verzeichniseintrag wie der eingegebene Dateiname.

Im Gegensatz zu realpath (3) sind nicht vorhandene nachgestellte Komponenten zul├Ąssig und werden beibehalten.

Ich habe einige der irrelevanteren Details ausgelassen. Lesen Sie daher unbedingt die Manpage. Abschnitt "Verlaufserweiterung", Unterabschnitt "Modifikatoren".