- - PR -
while文の中の変数をwhile文の外で使いたいのですが・・・
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-10-22 15:58
コブラさん、確認有難うございます。
同じBシェルでも、OSによってはKシェルに近い(例えばHP-UX)と いう話を聞いたことがあります。(OSというかSYSTEM Vとかでしょうか?) 私はSolarisを使用しております。 | ||||
|
投稿日時: 2004-10-22 16:19
Cygwin では テキスト末尾の状態で結果がちがいます。
Cygwin では sh も Bash なのかも 最終行が改行無しなら 読まれない 4 end で終了 最終行の後にも空 改行が続くと expr が エラーになり end で終了 ぴったりの時のみ 正常終了。 k.sh 1 start 4 status 4 end k.sh 1 start 4 status 11 status expr: syntax error status + status expr: syntax error status end k.sh 1 start 4 status 11 status 11 end sh など使わずに 、もっと軟弱なスクリプト言語でやりましょう。 ダイハードな禁欲主義でないなら。 細かいことにイライラを感じたなら 21世紀の CUI でも構想しましょう。 UNIXにみる世代間の断絶 http://namazu.org/~satoru/misc/ggap.html [ メッセージ編集済み 編集者: MMX 編集日時 2004-10-22 16:27 ] | ||||
|
投稿日時: 2004-10-22 16:20
実行結果:
こんなん出ましたけど。。。 [ メッセージ編集済み 編集者: コブラ 編集日時 2004-10-22 16:21 ] [ メッセージ編集済み 編集者: コブラ 編集日時 2004-10-22 16:21 ] | ||||
|
投稿日時: 2004-10-22 16:25
皆さん、有難うございました。
ファイルディスクリプタを使うことで解決致しました。 ですが、もしこの使い方に問題があるようでしたらご指摘ください。 ----------------------成功スクリプト #!/usr/bin/sh UNA=1 IN=/tmp/kikiin echo $UNA start exec 3<&0 0<${IN} while read A B do UNA=`expr $UNA + $A + $B` echo $UNA status done exec 0<&3 3<&- echo $UNA end ----------------------実行結果 #!/usr/bin/sh UNA=1 UNA=1 IN=/tmp/kikiin IN=/tmp/kikiin echo $UNA start + echo 1 start 1 start exec 3<&0 0<${IN} + exec while read A B do UNA=`expr $UNA + $A + $B` echo $UNA status done + read A B + expr 1 + 1 + 2 UNA=4 + echo 4 status 4 status + read A B + expr 4 + 3 + 4 UNA=11 + echo 11 status 11 status + read A B exec 0<&3 3<&- + exec echo $UNA end + echo 11 end 11 end | ||||
|
投稿日時: 2004-10-22 16:46
4.5.6 ループ文のリダイレクトとパイプ処理
http://www.tsden.org/takamiti/shText/shText040.html#H456 6.2 配列(表引き) http://www.tsden.org/takamiti/shText/shText060.html sh 「恐るべし」 [ メッセージ編集済み 編集者: MMX 編集日時 2004-10-22 16:58 ] |