文件:test.zip
Bash 脚本
while read filename; do
zip_file=${filename}
# do stuff
done;
变量中存储的值 = “test”
答案1
使用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%%.*}"
答案2
heemayl 仍然正确:例如:
full_path=/foo/bar/baz.zip
file_name="${full_path##*/}"
name="${file_name%.*}"
答案3
使用sed
:
zip_file="$(<<< "${filename}" sed -r 's/^(.*)\..*/\1/')"
zip_file="$( [...] )"
:将调用的子 shell 的以字符串形式分配stdout
给变量zip_file
<<< "${filename}" [...]
:将变量的内容以字符串形式重定向${filename}
到调用的子 shellstdin
sed -r 's/^(.*)\./\1/'
: 使用扩展正则表达式编辑调用的子 shell 的内容stdin
,通过匹配整个字符串并将其替换为与从开头到最后一个点的每个字符匹配的子字符串
编辑:看到您对 heemayl 的答案的评论,用匹配从最后一个斜杠到最后一个点的每个字符的子字符串进行替换:
zip_file="$(<<< "${filename}" sed -r 's/^.*\/(.*)\..*/\1/')"