はtcshの中に、この変数を考える:tcshのパスからファイル名を削除するにはどうしたらいいですか?
set i = ~/foo/bar.c
どのように私は$i
のちょうどディレクトリ部分を得ることができますか?
~/foo
はtcshの中に、この変数を考える:tcshのパスからファイル名を削除するにはどうしたらいいですか?
set i = ~/foo/bar.c
どのように私は$i
のちょうどディレクトリ部分を得ることができますか?
~/foo
お使いのシステムは、あなたがでした 'dirnameに' コマンド提供している場合:
set i = `dirname ~/foo/bar.c`
echo $i
注変数名の前に欠落している$を。この解決法はシェルにとらわれない。
使用例えばdirname
コマンド、:
set i = `dirname "~/foo/bar.c"`
お知らせパスの前後に引用符。それらを含めることが重要です。引用符を省略すると、スペースを含むパスではdirname
が失敗します。引用文がより前に評価されることを覚えておいてください。引用符が使用されず、ホームパスにスペースが含まれていれば、このような簡単な例でも失敗することがあります。
もちろん、他のすべてのコマンドにも同じ問題が適用されます。常にというコマンドの引数を二重引用符で囲むことをお勧めします。
echo $i | awk -F"/" '{$NF="";print}' OFS="/"
ここでの回答を待っている間に、私はそれを行うことが見いださ方法:
set i = ~/foo/bar.c
echo $i:h
結果:完全にするために
~/foo
、ベース名コマンドを使用して達成されたファイル名を取得します:
set j = `basename ~/foo/bar.c`
echo $j
ここにありますtcshの中
利用できるが、いくつかの他のシェル私の知る限り
> set i = ~/foo/bar.c
> echo ${i:t}
bar.c
> echo ${i:h}
/home/erflungued/foo
実際に使用dirname "$i"
、およびない${i:h}
:上記とは異なるmething。
$i
にファイル名のみ(パスなし)が含まれている場合、後者は意図した結果を生成しませんが、dirname
は現在のディレクトリ.
を正しく返します。
> set i = bar.c
> echo ${i:h}
bar.c
> dirname "$i"
.