2009-07-05 13 views

答えて

3

お使いのシステムは、あなたがでした 'dirnameに' コマンド提供している場合:

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

注変数名の前に欠落している$を。この解決法はシェルにとらわれない。

0

使用例えばdirnameコマンド、:

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

お知らせパスの前後に引用符。それらを含めることが重要です。引用符を省略すると、スペースを含むパスでは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

ここにありますtcshの中
利用できるが、いくつかの他のシェル私の知る限り

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

実際に使用dirname "$i"、およびない${i:h}:上記とは異なるmething。

$iにファイル名のみ(パスなし)が含まれている場合、後者は意図した結果を生成しませんが、dirnameは現在のディレクトリ.を正しく返します。

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