0

tcsh に次の変数があるとします。

set i = ~/foo/bar.c

のディレクトリ部分だけを取得するにはどうすればよい$iですか?

~/foo
4

7 に答える 7

3

システムが「dirname」コマンドを提供している場合、次のことができます。

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

変数名の前に $ がないことに注意してください。ただし、このソリューションはシェルに依存しません。

于 2009-07-05T09:23:34.877 に答える
2

ここに上記とは異なるものがあります:
tcshで利用可能ですが、他のシェルはほとんどありませんAFAIK

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

ここで答えを待っている間に私が見つけた方法:

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

結果:

~/foo
于 2009-07-05T10:23:09.310 に答える
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 に答える