0

给定 tcsh 中的这个变量:

set i = ~/foo/bar.c

我怎样才能得到目录部分$i

~/foo
4

7 回答 7

3

如果您的系统提供了“dirname”命令,您可以:

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

注意变量名前面缺少的 $。不过,这个解决方案与 shell 无关。

于 2009-07-05T09:23:34.877 回答
2

我在这里等待答案时发现这样做的方式:

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

结果:

~/foo
于 2009-07-05T10:23:09.310 回答
2

这是与上面不同的东西:
在 tcsh 中可用,但其他 shell 很少 AFAIK

> set i = ~/foo/bar.c
> echo ${i:t}
bar.c
> echo ${i:h}
/home/erflungued/foo
于 2011-04-06T06:46:58.410 回答
1

完全而言,获取文件名是使用 basename 命令完成的:

set j = `basename ~/foo/bar.c`
echo $j
于 2010-09-10T09:42:31.223 回答
0

使用dirname命令,例如:

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

注意路径周围的引号。将它们包括在内很重要。如果跳过引号,dirname包含空格的路径将失败。请注意,~/表达式在执行之前进行评估dirname,因此如果不使用引号并且主路径包含空格,即使这样简单的示例也可能会失败。

当然,同样的问题也适用于所有其他命令,最好始终用引号将命令的参数括起来。

于 2009-07-05T09:25:39.740 回答
0
echo $i | awk -F"/" '{$NF="";print}' OFS="/"
于 2009-07-05T10:02:34.937 回答
0

dirname "$i"确实使用,而不是${i:h}.

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

> set i = bar.c
> echo ${i:h}
bar.c
> dirname "$i"
.
于 2014-03-28T11:59:35.770 回答