Sto cercando di impostare una variabile in uno script sh sugli ultimi 3 caratteri del nome di base di un file (per nome di base intendo senza il percorso e senza il suffisso). Sono riuscito a farlo ma, per pura curiosità, mi chiedo se esiste un singolo comando più breve che posso usare. Inizialmente avevo un one-liner con awk
, ma era piuttosto lungo. Attualmente ho questo script a due righe (supponendo che sia presente un nome file completo $1
):
filebase=`basename "$1"`
lastpart=`echo -n ${filebase%.*} | tail -c3`
Ad esempio, "/path/to/somefile.txt" finisce con "ile" in $lastpart
.
Posso in qualche modo combinare basename
e il bit per rimuovere il suffisso in un singolo comando, e c'è un modo per inviarlo tail
(o qualcos'altro che posso usare) senza usare una pipe? Il suffisso è sconosciuto, quindi non posso basarlo come parametro su basename
.
L'obiettivo principale non è in realtà tanto essere il più breve possibile, quanto più leggibile a prima vista. Il contesto reale di tutto ciò è questa domanda su Superuser , in cui sto cercando di trovare una risposta ragionevolmente semplice.
two
avrebbe funzionato; l'estensione su quello sarebbe .three
immagino.
file.one.two.three
? Vorrestiile
otwo
?