Próbuję poprawić mój pierwszy skrypt bash, aw pewnym momencie nazwa pliku jest przekazywana do skryptu jako $1
. Muszę wyodrębnić nazwę pliku bez rozszerzenia.
Obecnie zakładam, że wszystkie rozszerzenia są trzyliterowe, więc usuwam ostatnie 4 znaki, aby uzyskać nazwę pliku:
a="${1:0:-4}"
Ale muszę być w stanie pracować z rozszerzeniami, które mają więcej niż trzy znaki, jak %~n1
w systemie Windows.
Czy jest jakiś sposób na wyodrębnienie nazwy pliku bez rozszerzenia z argumentów?
Odpowiedzi:
Zwykłym sposobem na zrobienie tego w bash jest użycie rozszerzenia parametrów. (Zobacz stronę man bash i wyszukaj „Parameter Expansion”.)
%
Wskazuje, że wszystko pasujący wzorzec następujący (.*
) z prawej strony, wykorzystując najkrótszą mecz to możliwe, powinien być usunięty z parametrem$1
. W takim przypadku nie potrzebujesz podwójnych cudzysłowów („) wokół wyrażenia.źródło
${1%.*}
WróciSomething.eng
. Jeśli chcesz usunąć wszystko po prawej stronie pierwszego, w.
tym.
użyj${1%%.*}
, który zwróciSomething
.Jeśli znasz rozszerzenie, możesz użyć basename
źródło
One-liner w Bash bez użycia basename :
źródło