在shell中回显basename

在shell中回显basename,shell,Shell,我有一个目录的路径,需要从中提取文件名,以便在shell脚本中进一步使用 #!/bin/sh dir=/var/tmp/file1 fname= basename $dir echo $fname echo "The script executes:" $fname echo $fname 在这里,fname只打印一次。在所有其他情况下,它都是空白的 我哪里出了问题?下面的操作正常 #!/bin/sh dir=/var/tmp/file1 fname=`basename $dir` ech

我有一个目录的路径,需要从中提取文件名,以便在shell脚本中进一步使用

#!/bin/sh
dir=/var/tmp/file1
fname= basename $dir 
echo $fname
echo "The script executes:" $fname 
echo $fname
在这里,fname只打印一次。在所有其他情况下,它都是空白的


我哪里出了问题?

下面的操作正常

#!/bin/sh
dir=/var/tmp/file1
fname=`basename $dir`
echo $fname
echo "The script executes:" $fname
echo $fname
输出$:./tt.sh

文件1

脚本执行:file1

文件1


在以上答案的基础上,再加上几点

如果你只想要文件名而不需要任何扩展名

使用下面的命令


basename filename.type.type

fname=basename$dir
应该是
fname=$(basename“$dir”)
。也许您应该阅读教程或手册?我是这样使用的,但现在在本例中,将执行file1:(@user2403449如果您完全是这样做的话就不会了。请注意,
=
s周围的空格会产生巨大的差异。@my Thinks
$()
现在比backticks更受欢迎。虽然在这种情况下不是绝对必要的,但变量应该作为规则引用。