Utilice la expansión de parámetros para modificar la salida de otra expansión

Utilice la expansión de parámetros para modificar la salida de otra expansión

Estoy intentando usar las expansiones de parámetros de Bash para modificar el resultado de una sustitución de comando u otra expansión de parámetros.

Las siguientes expansiones anidadas funcionan bastante bien en Zsh; pero resulta en un error de "mala sustitución" en Bash:

${${PWD##*/}//trunk/latest}

o

${$(basename $PWD)//trunk/latest}

la salida debe ser la última carpeta de $PWD, reemplazada por latestcuando mi directorio actual seatrunk

así /home/user/trunkdebería serlatest

¿Existe un equivalente de Bash que permita encadenar expansiones sin depender de variables o canalizaciones? ¿O las expansiones de Bash solo permiten que la entrada sea una cadena o una variable simple?

Respuesta1

No, ese anidamiento de operadores de sustitución es exclusivo de zsh.

Ten en cuenta que con zshlike con (t)csh, también puedes hacerlo ${PWD:t:s/trunk/latest/}.

Aunque bashtambién admite esos modificadores de historial de csh para la expansión del historial, no los admite para sus expansiones de parámetros.

Aquí con bash, use una variable temporal:

var=${PWD##*/} var=${var//trunk/latest}

Respuesta2

Prueba esto con bash:

[[ $PWD =~ .*/(.*) ]] && echo "${BASH_REMATCH[1]//trunk/latest}"

o con un comando:

[[ $PWD =~ .*/(.*) && ${BASH_REMATCH[1]//trunk/latest} =~ (.*) ]]

El resultado está en${BASH_REMATCH[1]}

Respuesta3

Quieres...?

PWD=latest

No veo un método para su solicitud. Si desea reemplazar todo $PWDcon lo último, la mejor manera de hacerlo es hacerlo con cdlo último.

[ /home/user/trunk = "$PWD" ] && OLDPWD=../latest cd -

...que lo llevará a la última versión e imprimirá el nombre de la ruta a la salida estándar. Puedes volver al lugar de donde viniste si lo cd -vuelves a hacer. Puedes hacer lo mismo con $CDPATH:

mkdir -p /tmp/{1..5}  ; \
CDPATH=/tmp cd 3; cd -; \
echo "${CDPATH:-empty or unset::}" "$OLDPWD"

/tmp/3
/home/mikeserv
empty or unset:: /tmp/3

información relacionada