- PR -

シェルスクリプト・2つのスペースを含む変数の扱い

1
投稿者投稿内容
だま
会議室デビュー日: 2004/08/28
投稿数: 19
投稿日時: 2005-10-24 22:55
シェルスクリプトを作成する際、変数に2つのスペースを持つ値を代入するにはどうすればいいのでしょうか。

例えば変数SPACEに「Jan△△1」という文字列を代入したい(△はスペース1文字分)時、

SPACE="Jan△△1"
echo $SPACE   としても、

結果は「Jan△1」となってしまいます。
どなたかご存じの方、よろしくお願いします。
水都
大ベテラン
会議室デビュー日: 2004/07/22
投稿数: 111
投稿日時: 2005-10-24 23:46
echoの方の変数も""で囲う
代入には成功しているけど、出力の時に連続した半角スペースが1つになっているのでは
全角スペースで誤魔化す事もできるかも?

[ メッセージ編集済み 編集者: 水都 編集日時 2005-10-24 23:52 ]
あんとれ
ぬし
会議室デビュー日: 2004/01/14
投稿数: 556
投稿日時: 2005-10-25 11:02
もっと具体的に書きますと・・・

SPACE="Jan△△1"
echo "$SPACE"

echo $SPACE

だと、展開された結果、

echo Jan△△1

となってしまい、引数を指定するときにスペースの数は関係ありませんから

Jan△1

になってしまいます。

[ メッセージ編集済み 編集者: あんとれ 編集日時 2005-10-25 11:04 ]
Mattun
ぬし
会議室デビュー日: 2004/08/10
投稿数: 1391
投稿日時: 2005-10-25 14:16
引用:

SPACE="Jan△△1"
echo "$SPACE"

echo $SPACE

だと、展開された結果、

echo Jan△△1

となってしまい、引数を指定するときにスペースの数は関係ありませんから

Jan△1

になってしまいます。



bash -x scriptname.sh
で実行してみると、この辺の違いが分かりやすく出力されます。
angel
ぬし
会議室デビュー日: 2005/03/17
投稿数: 711
投稿日時: 2005-10-25 16:51
こんにちは。
余談&ちょっとしたクイズ

1.
 file="a b c"
 touch "$file"



 touch "a b c"

と同じ ( 1ファイル生成もしくは更新 )

2.
 files="a b c"
 touch $files



 touch a b c

と同じ ( 3ファイル生成もしくは更新 )

3.
 files="a *"
 touch $files



 touch a *

と同じ ( * はワイルドカードなので、glob が効いて、現ディレクトリの全ファイル名に展開 )

Q.
では、

 files="〜"
 touch … ← files変数を使用

の形を利用して、

 touch "a" "*"

と同じ結果を得る ( glob を効かさず、* というファイルを生成もしくは更新する ) には?
コブラ
ぬし
会議室デビュー日: 2003/07/18
投稿数: 1038
お住まい・勤務地: 神奈川
投稿日時: 2005-10-26 19:40
RedHat9
コード:
space="Jan \020\020 1"
echo -e $space



Solaris
コード:
space="Jan \020\020 1"
/usr/bin/echo $space



どっちか。
だま
会議室デビュー日: 2004/08/28
投稿数: 19
投稿日時: 2005-10-26 22:59
皆さん、ご親切なご回答ありがとうございました。
そういえばOSを書くのを忘れてました。Solaris8を使ってます。
コブラさんが書いてくれた内容で解決です。

本当にありがとうございました。
これでしめさせていただきます。
1

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