- PR -

while文の中の変数をwhile文の外で使いたいのですが・・・

投稿者投稿内容
壬生義士
会議室デビュー日: 2004/05/07
投稿数: 18
投稿日時: 2004-10-22 15:58
コブラさん、確認有難うございます。

同じBシェルでも、OSによってはKシェルに近い(例えばHP-UX)と
いう話を聞いたことがあります。(OSというかSYSTEM Vとかでしょうか?)
私はSolarisを使用しております。
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 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 ]
コブラ
ぬし
会議室デビュー日: 2003/07/18
投稿数: 1038
お住まい・勤務地: 神奈川
投稿日時: 2004-10-22 16:20
実行結果:

コード:
 環境    シェル    結果

Solaris sh ×
Solaris bash ○
RedHat sh ○
RedHat bash ○
CygWin sh ○
CygWin bash ○



こんなん出ましたけど。。。

[ メッセージ編集済み 編集者: コブラ 編集日時 2004-10-22 16:21 ]

[ メッセージ編集済み 編集者: コブラ 編集日時 2004-10-22 16:21 ]
壬生義士
会議室デビュー日: 2004/05/07
投稿数: 18
投稿日時: 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
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 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 ]

スキルアップ/キャリアアップ(JOB@IT)