Próbuję ustawić zmienną w skrypcie sh na 3 ostatnie znaki podstawowej nazwy pliku (pod nazwą podstawową mam na myśli bez ścieżki i sufiksu). Udało mi się to zrobić, ale z czystej ciekawości zastanawiam się, czy mogę użyć krótszego pojedynczego polecenia. Początkowo miałam jedną wkładkę awk
, ale była raczej długa. Obecnie mam ten dwuwierszowy skrypt (zakładając, że jest pełna nazwa pliku $1
):
filebase=`basename "$1"`
lastpart=`echo -n ${filebase%.*} | tail -c3`
Na przykład „/path/to/somefile.txt” kończy się na „ile” w $lastpart
.
Czy mogę jakoś połączyć basename
i nieco rozebrać sufiks w jednym poleceniu i czy istnieje sposób na wysłanie go do tail
(lub czegoś innego, z czego mogę skorzystać) bez użycia potoku? Przyrostek jest nieznany, więc nie mogę oprzeć go na parametrze basename
.
Głównym celem nie jest bycie tak krótkim, jak to tylko możliwe, aby być jak najbardziej czytelnym na pierwszy rzut oka. Rzeczywistym kontekstem tego wszystkiego jest pytanie Superuser , w którym staram się znaleźć dość prostą odpowiedź.
two
działałby; Wydaje mi się, że to rozszerzenie .three
.
file.one.two.three
? Chceszile
czytwo
?