• ベストアンサー

「.」とは

「.」の用途を教えてください。 . filenameとしたらどうなるのでしょうか?  また、eval filenameとしたらどうなるんでしょうか?

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

  • ベストアンサー
  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.3

> \$$って、どういう意味なんでしょうか? \$ と $x です。 入力された変数名を展開するのが $x 。それの頭に $ を一つくっつけたいんですが $$x とやってしまうと、$$ に意味があって、このシェルのプロセス番号を 表してしまいます。 なので、$ をエスケープして \$ 、それに続けて $x です。 > 何度もすいません。 質問サイトなので、質問することに負い目を感じることはありません。 答えたくなくなれば、答えなければ良いだけなので :-)

その他の回答 (2)

  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.2

> 出来ればevalが便利そうに思えるscriptの例を簡単でいいので作成してくれると有難いのですが・・・ 実は、さっきの回答を書きながら考えていたのですが、なかなか思いつかなくて (^^; eval じゃなくてはできない、ということで、ひとつ思いついたのは、シェルの 変数展開などを可変にしたい場合です。 例えば、 read x echo \$$x eval echo \$$x 設定済みの環境変数なんかを入力してみてください。 $ sh aaa HOME      ← これは入力です $HOME /home/a-kuma  ← 私のホームディレクトリ eval は、使うと便利、というよりも、使わないと出来ない処理がある、ってな感じです。 シェルスクリプトは結構書きますが、めったに eval を使うことはありません。

maxzuki
質問者

補足

何度もすいません。 \$$って、どういう意味なんでしょうか?

  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.1

> . filenameとしたらどうなるのでしょうか? sh系のシェルの場合、filename で示されるファイルをシェルスクリプトだと思って 読込んで処理をします。 例えば、シェルスクリプトから、共通的に利用できるサブルーチンをこれまた シェルスクリプトで用意して、それを呼び出すように使えます。 sh filename とやるのとの違いは、sh filename が別プロセスを起動するのに対し、 . filename は、ひとつのプロセスで処理されます。 そのため、そのスクリプトでシェル変数や環境変数を変更した場合、呼出し元に影響を 与えます。 > また、eval filenameとしたらどうなるんでしょうか? eval は、その後に続く引数をシェルに対する引数だと評価して実行します。 eval filename であれば、filename で示されるファイルが実行可能であれば、 ただそれを実行するだけです。 # これだけじゃ、何のことかわからないかな?

maxzuki
質問者

補足

どうもすみません。こちらの説明が不十分だったみたいで・・・出来ればevalが便利そうに思えるscriptの例を簡単でいいので作成してくれると有難いのですが・・・

関連するQ&A

  • eval文中の+

    Perlのeval文で、 $str='hoge'; eval "print+$str"; とすると「hoge」と出力されます。 このとき+はスペースとして扱われているようなのですが、 そのことについてマニュアルなどに記載されていないようです。 eval "print+1+2"; の場合はちゃんと3と表示されるし、 きっとevalのほうで+を適当に解釈してるんだと思いますが、 それであってるんでしょうか。 またこのようなeval中で特殊に評価される文字があるのでしょうか。 できれば関連文献などを教えていただけるとなお嬉しいです。 マニュアルを見落としてる可能性もあるなあ。 そうだったら恥ずかしい。^^;

    • ベストアンサー
    • Perl
  • eval

    if (preg_match("/aaa/", "aaa")) { print 'aaa'; } のevalを if (eval('preg_match("/aaa/", "aaa")' . ';')) { print 'aaa'; } のようにしてみたのですが、間違っていました。 evalで書くとどうなるんですか?

    • ベストアンサー
    • PHP
  • 【FLASH】Suzukaでのeval関数の使用に関して

    質問させて頂きます。 現在、フリーソフトのSuzukaを使用してFLASH(SWF4)を作成中なのですが、スクリプトにevalを記述すると、構文エラーとなってしまいます。 [ex] i = 1; ary1 = 0; eval("ary" & 1) = 1; 【←構文エラー】 eval("ary" & 1)の他に、eval("ary" add 1)、eval("ary" + 1)なども試してみたのですが、すべてエラーとなってしまいます。 どなたかご存知の方がおられましたら、ご教授願います。 よろしくお願い致します。

  • eval()を使わずに数値を取得し計算する方法

    ある数値計算をするプログラムを作っています そのプログラムではeval()を使っています 某書籍や色々javariptを勉強しているサイトを参考にさせていただいてますが そこではeval()はあんまり使うなとか、普通は使わないとか書かれていました 多用すると動作が重くなるとか、危険だから何とか… しかし、自分が作成しているプログラムではevalがどうしても必要となってしまいます 簡単なプログラム例です function tas(){ gk=0 ~~~~省略~~~~ gk=eval(a.value)+eval(b.value); aとbに数字を入力して足し算の答えをを出力するプログラムの一部です (この時、答えの出力先はプログラムを端折っていますが用意されています) a=1 b=2に入力したとして この時eval()を使わずa(b).valueのみにすると 答えが12と連なって表示されてしまいます ただこの理由は自分でも解っています そしてこれを数値として取得し計算させるためにはeval()が必要となってしまいます 現状、自分の知識と経験では… もしeval()を使わずに数値を取得し計算する方法があれば教えて下さい

  • if文での記述の仕方がわからなくて困っています

    winxp flash8です。いつもありがとうございます。 if分で分岐したいのですが記述の仕方が違っているらしくスクリプトが通らなくて困っています。下記のようにかいています。 if (eval ("atari" + i) == 0)が違うようです。 // 30個のブロックをfor文で処理する for (i = 0; i < 30; i++) { if (flg[i] == 1) { continue; } // 次のループへ // ボールとブロック t i 番目 が当たったとき if (this._parent.tama0.hitTest (eval ("this._parent.t" + i))) { trace((eval ("atari" + i))); if (eval ("atari" + i) == 0) { //シルエットをとる eval ("this._parent.t" + i).gotoAndStop (1); set(eval ("atari" + i), 1); } else if (eval ("atari" + i) == 1) { // ブロックを非表示に eval ("this._parent.t" + i)._x = 77; eval ("this._parent.t" + i)._y = -100; flg[i] = 1; // 消えた事をあらわすフラグ

    • ベストアンサー
    • Flash
  • [UNIXコマンド] eval教えて下さい。

    evalって、結局なんのためにあって、どのように使うと便利なのか良く分かりませんでした。(一応manでは見てみましたが・・・) たしか見た例では eval `$path -uniq` ってあったと思います。 あわせて説明して頂けるとさいわです。

  • どうしても上手くいきません。

    <!-- function func() { var a = eval(document.price.fa.checked); var b = eval(document.price.fb.checked); var c = eval(document.price.fc.checked); var d = eval(document.price.fd.checked); var e = eval(document.price.fe.checked); var f = eval(document.price.ff.checked); var g = eval(document.price.fg.checked); var h = eval(document.price.fh.checked); var i = eval(document.price.fi.value); document.price.fprice.value = a + f +Math.round((b + c + d + e + 6500) * (50 + g)); } // --> すみません。 上の構文がどうしても上手くいきません。 計算結果が反映されません。 どこかおかしいのでしょうか。 不しつけながら宜しくお願いします。

  • エラーがとれません 助けてください

    エラーがとれません 助けてください http://cs.fit.edu/~mmahoney/dist/eval4.cpp をコンパイルすると eval4.cpp: In member function ‘bool Attack::read(FILE*)’: eval4.cpp:105: error: ‘strlen’ was not declared in this scope eval4.cpp:114: error: ‘strchr’ was not declared in this scope eval4.cpp: In function ‘int main(int, char**)’: eval4.cpp:132: warning: deprecated conversion from string constant to ‘char*’ eval4.cpp:133: warning: deprecated conversion from string constant to ‘char*’ eval4.cpp:134: warning: deprecated conversion from string constant to ‘char*’ eval4.cpp:183: error: ‘strlen’ was not declared in this scope のようなエラーがでてしまいます。 Ubuntuのg++でコンパイルしています。 なにがまずいのでしょうか?

  • fortran 固有値を求めるプログラム

    2x2の実行列の固有値を求めるモジュール関数の中で、d > 0 のときに出てくる sign(squt(d), -b)の値が示す意味と eval(2) = cmplx(c/e,0.0d0) でなぜ c/eの値が入るのかがわかりません。教えて下さい。よろしくお願いします。 プログラム module subprogs implicit none contains function eval2x2mat(a) result(eval) real(8), intent(in) :: a(:,:) complex(8) eval(2) real(8) b, c, d, e if (size(a,1) /= size(a,2)) stop ' not square ' if (size(a,1) /= 2) stop ' not 2x2 matrix ' b = -0.5d0*(a(1,1)+a(2,2)) c = a(1,1)*a(2,2)-a(1,2)*a(2,1) d = b**2-c if ( d < 0.0d0 ) then eval(1) = cmplx(-b,sqrt(-d)) eval(2) = conjg(eval(1)) else if ( d > 0.0d0 ) then e = -b+sign(sqrt(d),-b) ←ここの部分 eval(1) = cmplx(e,0.0d0) eval(2) = cmplx(c/e,0.0d0) else          ↑ここの部分 eval(1) = cmplx(-b,0.0d0) eval(2) = eval(1) endif end function eval2x2mat end module subprogs program main use subprogs implicit none real(8), allocatable :: a(:,:) integer :: n = 2 allocate(a(n,n)) a(1,1:2) = (/-1,1/) a(2,1:2) = (/-1,-1/) write(*,*) a(:,:), eval2x2mat(a) end program main

  • eval() 関数の代替関数を教えてください。

    eval() 関数の代替関数を教えてください。 [現在] var x = 5; var y = eval('x + 3'); // eval() 関数 console.log("y=", y); // 8 [代替] var x = 5; var y = □□□□□□□□□□ // 代替関数 console.log("y=", y); // 8