• ベストアンサー

Cシェルの変数の使い方をご教授下さい

Cシェルで変数を表現するときに、その一部を違う変数で表現することはできないのでしょうか? 分かりにくいと思うので例を書きます。 例) set HOGE1985=hoge set VAR=1985 と2つの変数を使って以下のような使い方をしたいのです。 echo ${HOGE${VAR}}  ←echo ${HOGE1985} のイメージ 上記の表現では間違っていました。 ちょっと無理のある使い方のような気がしますが もし可能であればどなたかご教授下さい。 お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • lunarosa
  • ベストアンサー率73% (30/41)
回答No.2

あるいは eval echo \$HOGE$VAR

peanut1985
質問者

お礼

この方法で出来ました☆ ありがとうございました。

その他の回答 (1)

  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.1

set ARRAY[HOGE1985]=hoge set VAR=1985 echo ARRAY[HOGE${VAR}] では駄目なん?

peanut1985
質問者

お礼

出来ました。ありがとうございました。 もっと簡単な方法があればご教授下さい。

関連するQ&A

  • シェルスクリプトのコマンド グループ化における変数の有効範囲について教

    シェルスクリプトのコマンド グループ化における変数の有効範囲について教えてください。 中括弧"{ }"を使うと親プロセス(=その実行中のプロセス)にて実行、 小括弧"( )"を使うとサブシェル(=子プロセス)にて実行されると認識しています。 また環境変数は子プロセスに引き継がれ、シェル変数は引き継がれないと認識しています。 以下のシェルスクリプト(Bシェル)でテストしたところ、続くような結果となりました。 ~スクリプト内容~ #!/bin/sh ##TEST1 VAR01=AAA { echo 中括弧内でVAR01は${VAR01}; } ( echo 小括弧内でVAR01は${VAR01}; ) ##TEST2 { VAR02=BBB; echo 中括弧内でVAR02は${VAR02}; } echo 外でVAR02は${VAR02} ##TEST3 ( VAR03=CCC; echo 小括弧内でVAR03は${VAR03}; ) echo 外でVAR03は${VAR03} ~実行結果~ 中括弧内でVAR01はAAA 小括弧内でVAR01はAAA 中括弧内でVAR02はBBB 外でVAR02はBBB 小括弧内でVAR03はCCC 外でVAR03は  VAR02、VAR03の結果は納得できます。 またVAR01が{ }に引き継がれているのも納得できました。 しかし、VAR01はシェル変数として作成した(exportによる環境変数化はしていない)にも関わらず、子プロセスである( )内処理にも引き継がれているのはなぜなのでしょうか? 

  • awk内で使用した変数をシェルに反映

    awk内で使用した変数をシェル変数に代入する事は可能でしょうか? system関数を使ってexportなどをしてみましたが、だめでした。 イメージ的には以下のような感じです。 #!/usr/ksh HOGE=1 echo $HOGE | awk '{ HOGE=2 }' echo $HOGE ←※ここでHOGEの内容が2になるようにしたい。 お手数ですが、お分かりになる方お助けお願いします。

  • Cシェルスクリプトで二重引用符をechoする

    Cシェルスクリプトで二重引用符をecho するにはどうしたらよいのでしょうか(できるのでしょうか)? エスケープ 「 \" 」のようなエスケープではダメでした。 変数展開をしたいので、一重引用符「'」で括るのではない方法が好都合です。 「VAR is "okwave"」 という出力を得るための同等のスクリプト例(冗長?): #! /bin/csh -f set VAR = "okwave" echo -n "VAR is " echo -n '"' echo -n "$VAR" echo '"' 宜しくお願い致します。

  • Bシェルで不定変数名を変数として取り扱うには

    ファイル(test.txtとします)に 0755 $HOGE/herehere $FOO/bar のような形で変数を示す文字列がはいっています。 どんな変数名かは事前にわかりません。 これをシェルプログラムで、 $が付いていたら変数名と解釈して使用したいです。 どんな変数名がファイルに含まれているかがわかっているなら、 以下のようにできたのですが、 変数名が不明のときにはどうしたらファイルに含まれている変数を そのまま使用できるのでしょうか。 HOGE=`command HOGE` #HOGEを引数にcommandコマンドを呼び出した結果を$HOGEとする FOO=`command FOO` #↑test.txtの中には$HOGEや$FOOが何度も出てくるので、 #出てくるたびにcommandコマンドを使うのは避けたい。 while read LINE do  FILE=`echo $LINE|sed "s%"'$HOGE'"%$HOGE%g"` done < /test.txt

  • シェルの変数セットについて

    どなたか教えてください。 以下のようなUNIXのシェルを作ってみたのですが変数がうまくセットされません。 これは仕様なんでしょうか??? シェルはkshでシェルの中でsuしているユーザはcshです。 例: ==test.sh== #!/bin/ksh A1="test test" su - user1 <<EOF echo "A1 :" $A1 set A2 =(test test) echo "A2 : " $A2 EOF exit ==実行結果== %./test A1 : test test A2 : %

  • bashなどのシェル変数の値に改行を含める事は可能でしょうか?

    タイトルの通りですが、通常のシェル変数の値として  [prompt]$ aaa="bbb<改行>ccc" のようなセットを行い、  [prompt]$ echo $aaa  bbb  ccc  [prompt]$ のような結果を得たいのですが、可能でしょうか。

  • for文で変数に格納される文字列 (Bシェル)

    シェルの記述に関しての質問です 例えば、 a1 b1 c1 a2 b2 c2 a3 b3 c3 a4 b4 c4 ・ ・ ・ というスペース区切りの配列が書かれたリストファイル(test.lst)を for VAR in `cat test.lst` do set $VAR echo $1 echo $2 echo $3 done という形で処理しようとします。 そうすると、$VAR に入る変数は "a1" や "b1" といった感じで行単位ではなく、スペース区切りで入ってきてしまい、 $2 や $3 はnullになってしまいます。 これを行単位で $VAR という変数に代入する方法はありますか? 区切り文字はスペースのままとします。 宜しくお願いします。

  • シェルスクリプトの変数

    Bシェルのスクリプトで入力した情報を書き出すというスクリプトで詰まってしまったので、アドバイスをお願いできますでしょうか? #!/bin/sh # COUNTER変数のリセット COUNTER=1 # 繰り返す回数を入力 read KURIKAESHI # KURIKAESHIで入力した回数入力を受け取り、出力する while [ $COUNTER -le $KURIKAESHI ];  do # 必要な情報の入力("NYUURYOKU_{COUNTER変数の数字}"の変数に入れる)   read NYUURYOKU_$COUNTER   echo "$NYUURYOKU_$COUNTER" ←※ココ   COUNTER=`expr $COUNTER + 1` done 上記のようなスクリプトを書き、"$NYUURYOKU_$COUNTER"の値を出力したいのですが、何かよい方法はありますでしょうか? echo "$NYUURYOKU_$COUNTER" と記述しただけでは、$NYUURYOKU_と$COUNTERとバラバラになってしまいます。(当然っちゃ当然ですが・・・) 何かよい方法がありましたらご教授お願いいたします。

  • 空白を含んだシェル変数の代入

    こんにちは。 空白を含んだシェル変数の代入について教えてください。 set test1="ABCD EFGHIJ" set w1=$test1 echo "w1 = $w1" このようなシェルスクリプトを実行させた時 w1 = ABCD と表示されてしまいます。 解決案があれば教えてください。 よろしくお願いします。

  • DOSバッチで変数の値を変数名に設定したいのですが、可能でしょうか?

    DOSバッチで変数の値を変数名に設定したいのですが、可能でしょうか? 例として、以下のようにVARという変数に対して、ある文字列を設定し、その文字列の名前の変数の値を別の変数に代入したいのです。 set VAR="TMP" if /i "%VAR%"=="TMP" (SET TEST=%%VAR%%) echo %TEST% ここで求めている挙動は、SET TEST=%%VAR%%の命令によって SET TEST=%TMP% → SET TEST=C:\Windows\Temp のように展開されればいいのですが、実際はSET TEST=%VAR%となってしまいます。 なにか良い方法がないでしょうか?