• ベストアンサー

[bash]ファイル内の変数名を値に変換したい

bashです。 環境変数に例えば以下の変数が設定されているとします。 VAL1="aaa" VAL2="bbb" aというファイルに以下が記載されているとします。 ${VAL1} ${VAL2} aというファイルを読み込んだ際に、 ${VAL1}を"aaa"、${VAL2}を"bbb"と読み替えて読み込む方法はありますか。 変数のパターンは事前に分からないので、 '${VAL1}'を"aaa"に置換する、とかの方法はなしです。 evalを使えばうまくいきそうな気がするのですが、うまくいきませんでした。 > cat a | eval ⇒何も出力されない。 何か分かる方教えてください。

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

  • ベストアンサー
  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.1

以下のシェルを作成して、実行してください。 aのファイルを読み込み、${VAL1}を"aaa"、${VAL2}を"bbb"と読み替えて、出力するスクリプトです。 ------------------------------ #! /bin/sh while read LINE do eval VARNAME=$LINE echo $VARNAME done < a ------------------------------

関連するQ&A

  • powershell)ファイル内変数名を変換したい

    powershellです。 変数に例えば以下の変数が設定されているとします。 ${VAL1}="aaa" ${VAL2}="bbb" test.txtというファイルに以下が記載されているとします。 ${VAL1} ${VAL2} test.txtというファイルを読み込んだ際に、 ${VAL1}を"aaa"、${VAL2}を"bbb"と読み替えて読み込む方法はありますか。 変数のパターンは事前に分からないので、 '${VAL1}'を"aaa"に置換する、とかの方法はなしです。 Invoke-Expressionを使えばうまくいくかと思い、 以下のように書いてみましたが、 Invoke-Expressionのコメントをはずすとエラーになります。 --------- ${VAL1}="aaa" ${VAL2}="bbb" ${SR} = New-Object System.IO.StreamReader( "Y:\test.txt", [Text.Encoding]::GetEncoding("Shift_Jis")) while ((${LINE} = ${SR}.ReadLine()) -ne ${null}){ #Invoke-Expression "${LINE_VAL}=${LINE}" Write-Output ${LINE} #Write-Output ${LINE_VAL} } ${SR}.close --------- 何か分かる方教えてください。

  • bashで変数を可変させたい

    /homeの中にあるフォルダaaa、bbb、cccのサブフォルダの容量を取得し、結果をそれぞれ、 /root/batchの中にaaa、bbb、cccというファイル名で出力。 そのファイルをcatで出力し、結果をmbox_#(#は数字)という変数に保存するバッチを作成したいと四苦八苦しながら作業を行なっております。 バッチを実行しますと、以下のようなエラーが出力されます。 ./abcde.sh: line 16: mbox_1=62: command not found ./abcde.sh: line 16: mbox_2=1: command not found ./abcde.sh: line 16: mbox_3=1: command not found mbox_#の#を可変させたいのですが、何か良い記述方法はございますでしょうか? ==以下バッチ内容== #!/bin/sh Path1=/home Path2=/root/batch n=0 for box in aaa bbb ccc do n=$[$n+1] for var in `ls $Path1/$box` do du -sm $Path1/$box/$var >> $Path2/$box done 'mbox_'$n=`cat $Path2/$box` done お手数をおかけしますが、宜しくお願い致します。

  • bashのexportによる環境変数設定に関して教えてくださいませ。

    bashのexportによる環境変数設定に関して教えてくださいませ。 複数のファイルに記述している環境変数設定を まとめて実行したい場合はどのようにすればよいでしょうか。 例えば、 ◆hogeファイルの内容 export AAA=aaa soruce ./piyo ◆piyoファイルの内容 export BBB=bbb この状態で、 source hoge とすると、 AAA=aaaは設定されているのですが、 BBB=bbbは設定されないようです。 source の中からsource の記述はできないのでしょうか? source ./piyo 部分を ./piyo にしてもダメでした。

  • 複数bashスクリプトの定数?の共通化

    たとえば以下のように A.bash、B.bash、C.bash の3つのbashスクリプトがあるときに それぞれの先頭で export OutFile=/aaa/bbb/ccc.txt と設定していたとします このとき、 何らかの事情で以下のよう export OutFile=/aaa/ggg/ccc.txt 変えなければならなくなった時に、 じか書きしている場合3ファイルとも 編集しなくてはいけません そうではなくて A.bash、B.bash、C.bashの3スクリプトの先頭で 設定ファイルを読み込んで export OutFile=/aaa/bbb/ccc.txt を取得するようにし、以下のように変更が発生した 場合も、 export OutFile=/aaa/ggg/ccc.txt 設定ファイルひとつだけ編集すればいいように したいのですが、そのようなことはできるのでしょうか? 説明べたでわかりにくいかも知れませんがお願いします。

  • 変数名の連結

    以下のような配列があるとします。 $str[0] = aaa; $str[1] = bbb; $str[2] = ccc; foreachでまわし変数名を連結し代入するというような事は可能なの でしょうか? foreach ($str as $key => $val) { //$keyをechoすると012と表示 //ここで変数名を$data0,$data1のようにしたいがうまくいかない $data . $key = $val; //配列にするぶんには正常に動作しました $data[$key] = $val; }

    • ベストアンサー
    • PHP
  • bashシェルスクリプトで変数を使う

    bashシェルスクリプト内で変数を使いたいです。 Linux内の設定ファイルを参考に、 ・変数名=その内容、で設定 ・${変数名} 、で呼び出す だと判断し、以下のように使っています。 #!/bin/bash WORK=/home/aaa/ cd ${WORK} その後検索したところ、 「呼び出すには、$変数名 のように記述する」との説明を見かけ、 実際$の後に変数名を付けるだけでも認識したのですが、 { }は付けても付けなくてもよいのでしょうか。 { }が必要な場合もあるのでしょうか。

  • 【Kシェル】変数の置換

    変数AAA="BBB" 変数BBB="abcde" のとき、 変数AAA だけで "abcde" を導くことはできますか? $$AAA としてもうまく置換してくれません。 よろしくおねがいします。

  • bashで出力を変数に格納したい。

    初歩的な質問で申し訳ありません。 bashで、あるプログラムの出力の一部を変数に格納したいのですが、どのようにすればよいのでしょうか? 例えば、 >>./test.exe this is a pen. という実行ファイルがあるときに。 isのみを、変数 a に格納する。と言ったものです。 >>echo ${a} is

  • bashで変数を含んだファイル読み込み

    お世話になります。 外部読み込みファイルの中に変数やコマンドをセットして利用したいのですが、それはできないのでしょうか? ----test.txt messages-${testdate} `hostname`.log -------------------------- ----test.sh testdate=`date +%Y%m%d` for line in `cat test.txt` do echo $line done -------------------------- ----出力 messages-${testdate} `hostname`.log -------------------------- ----望む出力結果 messages-20150521 servername.log -------------------------- 方法がございましたら、ご教授お願い致します。

  • bashで変数に追記

    bashで、変数に改行も含めて追記したいです。 具体的には echo $Var AA のとき、何か処理を行うことで echo $Var > /tmp/file less /tmp/file AA BB ・ ・ ・ としたいです。 わからなポイントとして以下の2点です。 1.bashでの変数への追記 2.リダイレクトしたものをlessで見るときに、 less /tmp/file AA BB ・・・・ となってしまわないこと です。 ご教授願えたらと思います。

専門家に質問してみよう