Estoy tratando de usar las expansiones de parámetros de Bash para modificar la salida de una sustitución de comando u otra expansión de parámetros.
Las siguientes expansiones anidadas funcionan bastante bien en Zsh; pero da como resultado un error de "sustitución incorrecta" en Bash:
${${PWD##*/}//trunk/latest}
o
${$(basename $PWD)//trunk/latest}
la salida debe ser la última carpeta del $PWD
, reemplazado por latest
cuando mi directorio actual es trunk
entonces /home/user/trunk
debería convertirse en latest
¿Existe un equivalente de Bash que permita encadenar expansiones sin depender de variables o tuberías? ¿O las expansiones de Bash solo permiten que la entrada sea una cadena o una variable simple?
Respuesta aceptada:
No, ese anidamiento de operadores de sustitución es exclusivo de zsh
.
Tenga en cuenta que con zsh
como con (t)csh
, también puedes hacer ${PWD:t:s/trunk/latest/}
.
Aunque bash
también admite esos modificadores de historial 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}