нераспознанный модификатор P в скрипте zsh

нераспознанный модификатор P в скрипте zsh

Я запускаю этот скрипт zsh, но получаю следующее сообщение об ошибке:

./executable: unrecognized modifier `P'

Код скрипта следующий:

#!/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}

Я понимаю, что эта ошибка связана с назначением foobar, но я не могу найти нигде, где это Pиспользуется, или почему это полезно. Есть идеи?

решение1

Возможно, попробуйте заменить на

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

Это сработает только в том случае, если файл существует, что :P не требуется.

решение2

Модификатор :Pбыл добавлен в Zshверсия 5.3, и, таким образом, будет недоступен в более старых версиях. Похожий, но не совсем идентичный подход будет заключаться виспользуйте :Aвместо этого модификатор.

От zshexpn(1):

Модификатор:a

Преобразует имя файла в абсолютный путь: добавляет текущий каталог, если необходимо; удаляет сегменты пути «.»; удаляет сегменты пути «..» и сегменты, которые непосредственно им предшествуют.

Модификатор:A

Преобразуйте имя файла в абсолютный путь, как это делает модификатор «a», а затем передайте результат через библиотечную функцию realpath(3) для разрешения символических ссылок.

Примечание: в системах, в которых отсутствует библиотечная функция realpath(3), символические ссылки не разрешаются, поэтому в этих системах «a» и «A» эквивалентны.

Примечание: foo:A и realpath(foo) различаются на некоторых входах. Для семантики realpath(foo) см. модификатор P.

Модификатор:P

Превратите имя файла в абсолютный путь, например realpath(3). Результирующий путь будет абсолютным, не будет содержать ни '.', ни '..' и будет ссылаться на ту же запись каталога, что и входное имя файла.

В отличие от realpath(3), несуществующие конечные компоненты разрешены и сохраняются.

Я опустил некоторые незначительные детали, поэтому обязательно проверьте страницу руководства: раздел «Расширение истории», подраздел «Модификаторы».

Связанный контент