Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何在shell脚本中获取文件名的第一个扩展名?_Bash_Shell_Sh_Cut - Fatal编程技术网

Bash 如何在shell脚本中获取文件名的第一个扩展名?

Bash 如何在shell脚本中获取文件名的第一个扩展名?,bash,shell,sh,cut,Bash,Shell,Sh,Cut,是否有内联命令可用于获取文件的第一个扩展名 我使用以下命令获取最新版本: FILE="filename.tar.bz2" EXT="${FILE##*.}" echo "EXT = ${EXT}" 返回 EXT = bz2 是否有类似的命令仅用于隔离tar var="config/filename.tar.bz2" ext=$(basename "$var") # extract filename only ext=${ext#*.} # remove ever

是否有内联命令可用于获取文件的第一个扩展名

我使用以下命令获取最新版本:

FILE="filename.tar.bz2"
EXT="${FILE##*.}"
echo "EXT = ${EXT}"
返回

EXT = bz2
是否有类似的命令仅用于隔离tar

var="config/filename.tar.bz2"
ext=$(basename "$var")    # extract filename only
ext=${ext#*.}             # remove everything in front the first dot
ext=${ext%%.*}            # remove everything after a dot
echo "$ext"
注意:按惯例,大写变量用于导出的变量,如列、行UID PWD TERM等。在脚本中首选小写变量

$ filename="filename.tar.bz2"
$ echo ${filename##*.}
ext
$ file_ext=${filename##*.} #put to variable
$ echo ${file_ext}
ext
注意:按惯例,大写变量用于导出的变量,如列、行UID PWD TERM等。在脚本中首选小写变量

$ filename="filename.tar.bz2"
$ echo ${filename##*.}
ext
$ file_ext=${filename##*.} #put to variable
$ echo ${file_ext}
ext
这将在句点之间输出字符串的第一个实例。在这种情况下,“焦油”


这将在句点之间输出字符串的第一个实例。在本例中,“tar.”

仅使用POSIX外壳程序语法,不使用外部命令子外壳程序调用,根据来自的正确答案展开:

!/副秘书长/垃圾箱/环境卫生 filepath=/path/to/config/filename.tar.bz2.bak echo“filepath:”$filepath 移除所有物品,包括最后一个/ filename=${filepath*/} echo“filename:”$filename 移除所有部件,直到并包括第一个圆点 所有扩展名=${filename*} 回显'all_extensions:'$all_extensions 删除所有内容,包括第一个点 第一个_扩展=${all_扩展%%.*} 回显“第一个扩展名:”$First_扩展名 last_extension=${all_extensions*} 回显“最后一个扩展名:”$Last_扩展名 用扩展名填充参数数组 如果s=';集合-$all_扩展 如果[$-gt 0] 然后 ext_num=1 printf'\n正在运行所有%d个扩展:\n'$ printf“%s\t%s\n”外部扩展名 延期 做 printf“%4d\t%s\n”$ext\u num$扩展名 ext_num=$ext_num+1 完成 fi 输出:

filepath:/path/to/config/filename.tar.bz2.bak 文件名:filename.tar.bz2.bak 所有扩展名:tar.bz2.bak 第一个扩展:tar 最后分机:bak 迭代所有3个扩展: 分机 1焦油 2 bz2 3贝克
根据来自的正确答案展开,仅使用POSIX shell语法,不使用外部命令子shell调用:

!/副秘书长/垃圾箱/环境卫生 filepath=/path/to/config/filename.tar.bz2.bak echo“filepath:”$filepath 移除所有物品,包括最后一个/ filename=${filepath*/} echo“filename:”$filename 移除所有部件,直到并包括第一个圆点 所有扩展名=${filename*} 回显'all_extensions:'$all_extensions 删除所有内容,包括第一个点 第一个_扩展=${all_扩展%%.*} 回显“第一个扩展名:”$First_扩展名 last_extension=${all_extensions*} 回显“最后一个扩展名:”$Last_扩展名 用扩展名填充参数数组 如果s=';集合-$all_扩展 如果[$-gt 0] 然后 ext_num=1 printf'\n正在运行所有%d个扩展:\n'$ printf“%s\t%s\n”外部扩展名 延期 做 printf“%4d\t%s\n”$ext\u num$扩展名 ext_num=$ext_num+1 完成 fi 输出:

filepath:/path/to/config/filename.tar.bz2.bak 文件名:filename.tar.bz2.bak 所有扩展名:tar.bz2.bak 第一个扩展:tar 最后分机:bak 迭代所有3个扩展: 分机 1焦油 2 bz2 3贝克
basename在你的代码中做了什么?@KamilCuk你是对的,那部分可以删除编辑basename在你的代码中做了什么?@KamilCuk你是对的,那部分可以删除编辑编辑像我一样返回bz2,但不像预期的那样返回tar编辑像我一样返回bz2,但是没有预期的那样,你能看看这个问题吗https://stackoverflow.com/questions/62292634/generate-where-clause-in-bash-using-variablesSo 我确实看了一眼,是吗?你是不是想宣传你的问题?请不要那样做你能看看这个问题吗https://stackoverflow.com/questions/62292634/generate-where-clause-in-bash-using-variablesSo 我确实看了一眼,是吗?你是不是想宣传你的问题?请不要那样做。。