modificador P no reconocido en el script zsh

modificador P no reconocido en el script zsh

Estoy ejecutando este script zsh pero aparece el siguiente mensaje de error:

./executable: unrecognized modifier `P'

El código del script es el siguiente:

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

Entiendo que este error tiene que ver con la asignación de foobar, pero no puedo encontrar ningún lugar Ppara dónde se usa ni por qué es útil. ¿Algunas ideas?

Respuesta1

Posiblemente intente reemplazar con

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

Eso sólo funcionará si el archivo existe, lo cual :P no requiere.

Respuesta2

El:P modificador fue agregado en Zsh.versión 5.3y, por lo tanto, no estará disponible en versiones anteriores. Un enfoque similar, aunque no exactamente idéntico, seríausa el :Amodificador en su lugar.

De zshexpn(1):

Modificador:a

Convierta el nombre de un archivo en una ruta absoluta: antepone el directorio actual, si es necesario; eliminar '.' segmentos de camino; y elimine los segmentos de ruta '..' y los segmentos que los preceden inmediatamente.

Modificador:A

Convierta un nombre de archivo en una ruta absoluta como lo hace el modificador 'a' y luego pase el resultado a través de la función de biblioteca realpath(3) para resolver enlaces simbólicos.

Nota: en sistemas que no tienen una función de biblioteca realpath(3), los enlaces simbólicos no se resuelven, por lo que en esos sistemas 'a' y 'A' son equivalentes.

Nota: foo:A y realpath(foo) son diferentes en algunas entradas. Para conocer la semántica de realpath(foo), consulte el Pmodificador.

Modificador:P

Convierta el nombre de un archivo en una ruta absoluta, como realpath(3). La ruta resultante será absoluta, no tendrá ni '.' ni los componentes '..', y hacen referencia a la misma entrada de directorio que el nombre del archivo de entrada.

A diferencia de realpath(3), se permiten y conservan los componentes finales inexistentes.

Omití algunos de los detalles más superfluos, así que asegúrese de consultar la página de manual; la sección "Expansión del historial", subsección "Modificadores".

información relacionada