Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

bashでの変数展開

0 views
Skip to first unread message

hanaji

unread,
Apr 17, 2001, 5:00:43 AM4/17/01
to
hanajiです。

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]$

--
han...@clubaa.com


hanaji

unread,
Apr 17, 2001, 4:58:27 AM4/17/01
to

sa...@eye.kisarazu.ac.jp

unread,
Apr 17, 2001, 6:02:57 AM4/17/01
to
こんばんは.齋藤です.

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

TAKAHASHI Toshinari

unread,
Apr 19, 2001, 4:14:59 AM4/19/01
to
In article <9bh0pl$fqf$2...@news01bb.so-net.ne.jp> "hanaji" <han...@clubaa.com> writes:
>cshの変数展開で例えば
> set HOGE = "/dir1/dir2/filename"
>って入っていれば
> $HOGE:h
>とかやると変数展開が働いてパスの部分が抽出できますが、
>これを bashでやりたいのですが可能でしょうか?

# 100人くらいからフォローが来てたらいやだなと思いつつ、、

bashには、もうちょっと一般的な表記である
${variable#pattern} 先頭から最小マッチングし残りを返す
${variable##pattern} 先頭から最大 〃
${variable%pattern} 後尾から最小 〃
${variable%%pattern} 後尾から最大 〃
というのがあります。

HOGE=/dir1/dir2/filename
echo ${HOGE%/*} --> /dir1/dir2

となるわけですが、体がperlの正規表現になっている人が多いでしょうから、
あんまり嬉しくないかもね。

-- 高橋toshiba

0 new messages