zsh その7 (749レス)
前次1-
抽出解除 レス栞

602
(1): 名無しさん@お腹いっぱい。 [sage] 2019/03/30(土) 14:08:35.55 AAS
>>600,601
600(1): 名無しさん@お腹いっぱい。 [sage] 2019/03/30(土) 09:43:53.90 AAS
>>599
ちょっと調べてみた
まずbashでhelp letを見てみると

Exit Status:
If the last ARG evaluates to 0, let returns 1; let returns 0 otherwise.

とあるので((...))は中身が0に評価されたときのみ1を返す
じゃあa=0とa=1(これはassignment)がどんな値に評価されるのか?だけど
POSIXを見ると$((...))の中身はCのルールに従って評価されると書いてある
((...))もPOSIXには無いけど同じルールに従うはず
外部リンク[html]:pubs.opengroup.org

で、Cだとassignmentはassignされた値を返すので
((a=0))は0、((a=1))は1を返すということになる
一言で言うと(( ... ))の中はCのルールが適用されるからということかな
set -eの回避策は((a=0, ..., a>100))とか、: $((a=0))とか、if文の中に押し込むとか色々ある
601(1): 名無しさん@お腹いっぱい。 [sage] 2019/03/30(土) 09:45:56.68 AAS
間違えた修正

誤 ((a=0))は0、((a=1))は1を返すということになる
正 ((a=0))は1、((a=1))は0を返すということになる
調べてくれてありがとう。Linux歴15年以上あるのに今頃知りましたよ
: $(( 〜 )) のスタイルにするしかないかー。面倒だ

ちなみにこんなwhile処理で発覚した。致命的なミスをする前に気づけてよかった

set -e
(( x = xmin ))
while : ; do
〜処理〜
(( x += dx ))
(( x > xmax )) && break
done

変数は全部浮動小数ね
604: 名無しさん@お腹いっぱい。 [sage] 2019/04/21(日) 01:52:16.18 AAS
>>602
このスレは始めてきたので今更だが
普通は

x=$((xmin))
x=$((x+dx))
[ "$x" -gt "$xmax" ]

とかやろ?
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 1.208s*