#!/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
basenamey 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
sedcomando 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