cshの変数展開で例えば
set HOGE = "/dir1/dir2/filename"
って入っていれば
$HOGE:h
とかやると変数展開が働いてパスの部分が抽出できますが、
これを bashでやりたいのですが可能でしょうか?
#こちらで調べたところだとヒストリ展開はあるのですが・・・
以下、参考まで。
[/tmp]$ cat test1.csh
#!/bin/csh
set A = "/dir1/dir2/filename.txt"
echo "$A:h"
[/tmp]$ ./test1.csh
/dir1/dir2
[/tmp]$ cat test2.sh
#!/bin/sh
A="/dir1/dir2/filename.txt"
echo "$A:h"
[/tmp]$ ./test2.sh
/dir1/dir2/filename.txt:h
[/tmp]$
bash の話なので
Newsgroups: fj.os.linux,fj.questions.programming,fj.questions.unix,fj.unix.shells
Followup-To: fj.unix.shells
としておきます.
In article Message-ID:<9bh0pl$fqf$2...@news01bb.so-net.ne.jp> at fj.os.linux,fj.questions.programming,fj.questions.unix,fj.unix.shells
"hanaji" wrote:
= hanajiです。
=
= cshの変数展開で例えば
= set HOGE = "/dir1/dir2/filename"
= って入っていれば
= $HOGE:h
= とかやると変数展開が働いてパスの部分が抽出できますが、
= これを bashでやりたいのですが可能でしょうか?
とりあえずこんなもんでいかがでしょうか.
#! /bin/sh
HOGE="/dir1/dir2/filename"
fname=`basename $HOGE`
dir=$(echo $HOGE | sed -e "s|/${fname}$||g")
echo $dir
--
Yasuyuki SAITO
# 100人くらいからフォローが来てたらいやだなと思いつつ、、
bashには、もうちょっと一般的な表記である
${variable#pattern} 先頭から最小マッチングし残りを返す
${variable##pattern} 先頭から最大 〃
${variable%pattern} 後尾から最小 〃
${variable%%pattern} 後尾から最大 〃
というのがあります。
HOGE=/dir1/dir2/filename
echo ${HOGE%/*} --> /dir1/dir2
となるわけですが、体がperlの正規表現になっている人が多いでしょうから、
あんまり嬉しくないかもね。
-- 高橋toshiba