#!/bin/bash
FILE="$(basename "$1")"
FILE="${FILE/%.jpeg/.jpg}"
¿Hay alguna forma de pegar estas dos líneas en una sola línea?
bash
shell
shell-script
string
gsklee
fuente
fuente
sed
, definitivamente será necesario, supongo.No puede anidar expansiones en bash (ni en ksh, ash y otras conchas aparte de zsh). Esto es solo una limitación cosmética, ya que, como ilustra, puede asignar una expresión intermedia a una variable temporal. Es un poco molesto para las frases sencillas, pero en los scripts es posiblemente mejor para la legibilidad.
Podría evitar usar la utilidad externa
basename
y usar una construcción de manipulación de cadenas en su lugar:Aquí, sucede que puede reescribir su script para colocar la sustitución del comando en el exterior . Ese no es un fenómeno general, ni obtienes nada más que un cierto sentimiento de una línea.
Zsh, para bien o para mal, te permite anidar expansiones:
O podría usar la construcción incorporada de zsh en lugar de
basename
:fuente
Yo iría por:
El segundo parámetro para basename es un sufijo que se eliminará del nombre del archivo (ver
man basename
)fuente
Puede usar un solo
sed
comando como en el siguiente:fuente
Incorporando
sed
, esto debería hacer el truco:(Esto no responde exactamente a su pregunta porque no puedo; no estoy seguro de si es posible).
fuente
Las
${}
construcciones Bash funcionan con nombres de variables , por lo que no hay forma de incrustar un comando directamente. El enfoque de @ sr_ es una alternativa si no le importa la bifurcación adicional.fuente
La línea
se puede acortar y hacer más portátil con
fuente