2009-07-05 79 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" 
.