2015-01-26 104 views
0

我编写了下面这段代码来打印输出中目录的文件名。该目录是dir1并且其文件名是L1, L2, L3, ..,L512如何在shell中输出文件名?

#!/bin/bash 
TOP=`pwd` 
for file in "$TOP/dir1"/*; do 
echo "$file" 
done 
exit 

但是,而不是印刷只是文件名(L1,L2,..),它输出对应于每个文件的全路径。我怎么能改变它只接收输出的文件名?

+0

'的文件 “$ PWD/DIR1 /” *'会比使用'TOP'更有效。一般来说,捕获'pwd'的输出比使用'$ PWD'更加昂贵; 'pwd'是内建的,就像'$ PWD'一样,但是执行命令替换需要'fork()'调用的开销。对于这个问题,'top = $ PWD'也可以提高效率。 (按照惯例,全部大写的名字保留用于环境变量和内置函数;在这种情况下,'TOP'既不是)。 – 2015-01-27 00:02:46

+0

@CharlesDuffy:我想知道为什么用你的答案的文件名不排序输出? L1 L10 L100 L101 L102 L103 L104 L105 L106 L107 L108 L109 L11 L110 L111 等 – KianStar 2015-01-27 00:37:38

+0

他们是* *排序:因为他们出现了。这是您的语言环境的排序顺序(如果您的语言环境设置为“C”,则为ASCII排序),而不是数字排序顺序。那里没有具体的答案。无论如何,您都会从globs获取语言环境排序顺序。 – 2015-01-27 01:21:39

回答

1

使用basename命令:

for file in "$TOP/dir1"/*; do 
basename "$file" 
done 
+1

这里basename是过度/不必要的;更有效地使用参数扩展(这是内置的,而不是调用外部可执行文件):'echo“$ {file ## * /}' – 2015-01-27 00:00:21

相关问题