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:~$
惜しいです。後はパラメータ毎に空白を表示するのと、最後だけ改行を表示すればよいですね。
続く。


コメント