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}