Файл: test.zip
Скрипт Bash
while read filename; do
zip_file=${filename}
# do stuff
done;
Значение, сохраненное в variable = "test"
Использовать bash
расширение параметра:
zip_file="${filename}"
new_name="${zip_file%.*}"
new_name
будет содержать имя test
если zip_file
имеет test.zip
Если zip_file
имеет test.foo.zip
, new_name
будет иметь test.foo
, если Вы хотите только test
из test.foo.zip
использование:
new_name="${zip_file%%.*}"
heemayl является все еще правильным: пример:
full_path=/foo/bar/baz.zip
file_name="${full_path##*/}"
name="${file_name%.*}"
Используя sed
:
zip_file="$(<<< "${filename}" sed -r 's/^(.*)\..*/\1/')"
zip_file="$( [...] )"
: присваивается stdout
из вызванной подоболочки к переменной zip_file
как строка <<< "${filename}" [...]
: перенаправляет содержание переменной ${filename}
к вызванной подоболочке stdin
как строка sed -r 's/^(.*)\./\1/'
: редактирует содержание вызванной подоболочки stdin
расширенные регулярные выражения использования, путем соответствия целой строке и замены его подстрокой, соответствующей каждому символу от запуска до последнего Редактирования точки : видя Ваш комментарий к ответу heemayl, для замены подстрокой, соответствующей каждому символу от последней наклонной черты до последней точки:
zip_file="$(<<< "${filename}" sed -r 's/^.*\/(.*)\..*/\1/')"