FORTRANです。echoコマンド作ります。いつものようにオプション無です。
echoコマンドは、パラメータで渡した文字列を表示するコマンドなので、パラメータ数分の文字列表示を繰り返せばできあがります。
takk@deb9:~$ cat echo1.f PROGRAM echo CHARACTER*100 ARGS INTEGER N N = IARGC() DO 11111 I=1,N CALL GETARG(I,ARGS) WRITE(*,*) ARGS(1:INDEX(ARGS,' ')-1) 11111 CONTINUE STOP END takk@deb9:~$
IARGC()でパラメータ数を取得して、DO文で回すだけです。
実行してみます。
takk@deb9:~$ gfortran echo1.f takk@deb9:~$ ./a.out aaa bbb ccc aaa bbb ccc takk@deb9:~$
だめですね。echoコマンドと表示が異なります。
本物のechoはこのような表示です。
takk@deb9:~$ echo aaa bbb ccc aaa bbb ccc takk@deb9:~$
FORMATを指定して表示するように変更してみましょう。
takk@deb9:~$ cat echo2.f PROGRAM echo CHARACTER*100 ARGS INTEGER N N = IARGC() DO 11111 I=1,N CALL GETARG(I,ARGS) WRITE(*,22222) ARGS(1:INDEX(ARGS,' ')-1) 11111 CONTINUE 22222 FORMAT(A) STOP END takk@deb9:~$
しかしこれでも、改行は取り除くことができないようです。
takk@deb9:~$ gfortran echo2.f takk@deb9:~$ ./a.out aaa bbb ccc aaa bbb ccc takk@deb9:~$
いろいろ調べてみると、FORMAT指定に$を書けば、改行なし扱いとなることが分かりました。
takk@deb9:~$ cat echo3.f PROGRAM echo CHARACTER*100 ARGS INTEGER N N = IARGC() DO 11111 I=1,N CALL GETARG(I,ARGS) WRITE(*,22222) ARGS(1:INDEX(ARGS,' ')-1) 11111 CONTINUE 22222 FORMAT(A$) STOP END takk@deb9:~$
しかしビルドするとこんなエラーが。
takk@deb9:~$ gfortran echo3.f echo3.f:9:14: 22222 FORMAT(A$) 1 Fatal Error: Invalid character ‘$’ at (1). Use ‘-fdollar-ok’ to allow it as an extension compilation terminated. takk@deb9:~$
オプションを使えと言われてるので、仕方なく-fdollar-okオプションを使うことにします。
takk@deb9:~$ gfortran echo3.f -fdollar-ok takk@deb9:~$ ./a.out aaa bbb ccc aaabbbccctakk@deb9:~$
惜しいです。後はパラメータ毎に空白を表示するのと、最後だけ改行を表示すればよいですね。
続く。
コメント