tcsh に次の変数があるとします。
set i = ~/foo/bar.c
のディレクトリ部分だけを取得するにはどうすればよい$i
ですか?
~/foo
システムが「dirname」コマンドを提供している場合、次のことができます。
set i = `dirname ~/foo/bar.c`
echo $i
変数名の前に $ がないことに注意してください。ただし、このソリューションはシェルに依存しません。
ここに上記とは異なるものがあります:
tcshで利用可能ですが、他のシェルはほとんどありませんAFAIK
> set i = ~/foo/bar.c
> echo ${i:t}
bar.c
> echo ${i:h}
/home/erflungued/foo
ここで答えを待っている間に私が見つけた方法:
set i = ~/foo/bar.c
echo $i:h
結果:
~/foo
完全に、ファイル名を取得するには、basename コマンドを使用します。
set j = `basename ~/foo/bar.c`
echo $j
dirname
たとえば、次のコマンドを使用します。
set i = `dirname "~/foo/bar.c"`
パスを囲む引用符に注意してください。それらを含めることが重要です。引用符をスキップするdirname
と、スペースを含むパスで失敗します。式が実行さ~/
れる前に評価されることに注意しdirname
てください。したがって、引用符が使用されておらず、ホーム パスにスペースが含まれている場合、このような単純な例でも失敗する可能性があります。
もちろん、同じ問題が他のすべてのコマンドにも当てはまります。コマンドの引数を常に引用符で囲むことをお勧めします。
echo $i | awk -F"/" '{$NF="";print}' OFS="/"