2009-07-05 78 views

回答

3

如果您的系统提供了一个“目录名称”命令,你可以:

set i = `dirname ~/foo/bar.c` 
echo $i 

注意在变量名前失踪$。这个解决方案虽然是shell不可知的。

0

使用dirname命令,例如:

set i = `dirname "~/foo/bar.c"` 

注意周围路径引号。包含它们很重要。如果您跳过引号,则dirname将对包含空格的路径失败。介意~/表达式的计算结果被执行之前dirname,如果不使用引号和主路径包括空格从而即使在这种简单的例子可能会失败。

当然,同样的问题也适用于所有其他命令,始终为的环绕参数是带引号的命令的良好做法。

0
echo $i | awk -F"/" '{$NF="";print}' OFS="/" 
1

我发现这样做在等待答案,这里的道:

set i = ~/foo/bar.c 
echo $i:h 

结果:

~/foo 
1

对于完全,获取文件名与基名的命令来完成:

set j = `basename ~/foo/bar.c` 
echo $j 
1

这里是如此从上面mething不同:
可用的tcsh中,但其他一些炮弹AFAIK

> set i = ~/foo/bar.c 
> echo ${i:t} 
bar.c 
> echo ${i:h} 
/home/erflungued/foo 
0

使用dirname "$i"事实上,并没有${i:h}

如果$i仅包含文件名(无路径),则后者不会生成预期结果,而dirname正确返回当前目录.

> set i = bar.c 
> echo ${i:h} 
bar.c 
> dirname "$i" 
.