modificador não reconhecido P no script zsh

modificador não reconhecido P no script zsh

Estou executando este script zsh, mas recebo a seguinte mensagem de erro:

./executable: unrecognized modifier `P'

O código do script é o seguinte:

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

Entendo que esse erro tem a ver com a atribuição foobar, mas não consigo encontrar nenhum lugar onde isso Pseja usado, nem por que é útil. Alguma ideia?

Responder1

Possivelmente tente substituir por

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

Isso só funcionará se o arquivo existir, o que :P não exige.

Responder2

O :Pmodificador foi adicionado no Zshversão 5.3e, portanto, não estará disponível em versões mais antigas. Uma abordagem semelhante, mas não exatamente idêntica, seriause o :Amodificador em vez disso.

De zshexpn(1):

Modificador:a

Transforme um nome de arquivo em um caminho absoluto: acrescenta o diretório atual, se necessário; remover '.' segmentos de caminho; e remova os segmentos de caminho '..' e os segmentos que os precedem imediatamente.

Modificador:A

Transforme um nome de arquivo em um caminho absoluto como faz o modificador 'a' e, em seguida, passe o resultado pela função da biblioteca realpath(3) para resolver links simbólicos.

Nota: em sistemas que não possuem uma função de biblioteca realpath(3), os links simbólicos não são resolvidos, portanto nesses sistemas 'a' e 'A' são equivalentes.

Nota: foo:A e realpath(foo) são diferentes em algumas entradas. Para semântica realpath(foo), consulte o Pmodificador.

Modificador:P

Transforme um nome de arquivo em um caminho absoluto, como realpath(3). O caminho resultante será absoluto, não terá nenhum '.' nem componentes '..' e referem-se à mesma entrada de diretório que o nome do arquivo de entrada.

Ao contrário do realpath(3), componentes finais inexistentes são permitidos e preservados.

Omiti alguns dos detalhes mais estranhos, portanto, verifique a página de manual; a seção "Expansão do histórico", subseção "Modificadores".

informação relacionada