- PR -

シェル変数に格納された値を順に取り出す方法について

1
投稿者投稿内容
あんとれ
ぬし
会議室デビュー日: 2004/01/14
投稿数: 556
投稿日時: 2007-11-13 14:35
こんなシェル変数 (B シェル) があったとします。

FOO="'aaa bbb' 'ccc' 'ddd eee fff'"

この変数から値を、'aaa bbb'、'ccc'、'ddd eee fff' という風に取り出したいのですが良い方法はないでしょうか。

以下のようにやったとしても当然ながら、'aaa、bbb'、'ccc'、'ddd、eee、fff' という風になってしまいます。

コード:
for arg in $FOO
  echo $arg
done



よろしくお願いします。
あんとれ
ぬし
会議室デビュー日: 2004/01/14
投稿数: 556
投稿日時: 2007-11-13 14:51
自己レスです。

以下の方法でできるところまでは確認できたのですが、
この方法だと引数をバックアップしたりしないといけないので、
できれば for を使ってやりたいと思っています。

コード:
#!/bin/sh

FOO="'aaa bbb' 'ccc' 'ddd eee fff'"

eval set -- $FOO

while [ $# -gt 0 ]
do
  echo 
  shift
done


末記人
大ベテラン
会議室デビュー日: 2005/12/05
投稿数: 233
お住まい・勤務地: あわにこ
投稿日時: 2007-11-13 15:05
こんにちは

デリミタを,(カンマ)などに変更することは可能ですか?
であれば IFSを使用すれば出来るかと思います。
'シングルクウォートも不要になります。

コード:
#!/bin/sh

IFS=","

foo="'aaa bbb','ccc','ddd eee fff'"
# foo="aaa bbb,ccc,ddd eee fff" #これでもおk

for i in $foo
do
 echo $i
done

あんとれ
ぬし
会議室デビュー日: 2004/01/14
投稿数: 556
投稿日時: 2007-11-13 15:16
引用:

末記人さんの書き込み (2007-11-13 15:05) より:

デリミタを,(カンマ)などに変更することは可能ですか?
であれば IFSを使用すれば出来るかと思います。
'シングルクウォートも不要になります。



$FOO に相当する変数は configure スクリプト内で定義されているものなので、
残念ながらできそうにないです。
温州蜜柑
ベテラン
会議室デビュー日: 2005/01/24
投稿数: 65
お住まい・勤務地: 東京都
投稿日時: 2007-11-13 15:25
sed で置換してみてはいかかでしょう?

コード:
#!/bin/sh

FOO="'aaa bbb' 'ccc' 'ddd eee fff'"

IFS=","

for arg in `echo $FOO | sed -e "s/' '/','/g"`
do
        echo $arg
done

exit


1

スキルアップ/キャリアアップ(JOB@IT)