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

リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
599
(1): 名無しさん@お腹いっぱい。 [sage] 2019/03/30(土) 02:31:35.90 AAS
(( a = 0 )) と (( a = それ以外の数値 )) の終了ステータス $? が
それぞれ1と0なんどけど仕様?(( a = 0.0 )) とかにしても1。
変数に設定された値自体が終了ステータスに影響するっておかしくない?

エラーがあると困るシェルスクリプトでは最初に set -e するようにしてるんだが
これじゃ (( )) で数値演算したいときに超困る
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
100(2): 名無しさん@お腹いっぱい。 [sage] 2012/12/28(金) 18:21:41.94 AAS
>>98
>>99以外だと${=x} を使ってもおk
))とか、: $((a=0))とか、if文の中に押し込むとか色々ある
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.034s