GNU/Linux >> Tutoriales Linux >  >> Linux

¿Usar expansión de parámetros para modificar la salida de otra expansión?

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}

Linux
  1. ¿Usar $[ Expr ] en lugar de $(( Expr ))?

  2. ¿Expansión y variables de Bash Brace?

  3. ¿Por qué no puedo usar Cd en un script Bash?

  4. ¿Cómo recordar cómo usar la redirección?

  5. ¿Usar variables dentro de la expansión {} sin `eval`?

Cómo usar el comando de lectura Bash

Bash:escribir en archivo

¿Qué shell debo usar:Tcsh Vs Bash?

¿Qué es Zsh? ¿Deberías usarlo?

Usando la salida de comandos anteriores en bash

¿Cuál es el uso de $# en Bash?