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

リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
100
(2): 名無しさん@お腹いっぱい。 [sage] 2012/12/28(金) 18:21:41.94 AAS
>>98
98(2): 名無しさん@お腹いっぱい。 [sage] 2012/12/28(金) 18:03:32.29 AAS
x="a b c"; for i in $x; do echo $i; done
ってやると、ash/bash だと、
a
b
c
って出ますが、zsh だと、
a b c
となってしまいます。
ash/bashと同じ動きをさせるにはどうすればいいでしょうか?
>>99
99(2): 名無しさん@お腹いっぱい。 [sage] 2012/12/28(金) 18:20:19.15 AAS
>>98
set -o shwordsplit
以外だと${=x} を使ってもおk
104: 名無しさん@お腹いっぱい。 [sage] 2012/12/28(金) 18:44:56.48 AAS
>>99>>100
ありがとうございます!
600
(1): 名無しさん@お腹いっぱい。 [sage] 2019/03/30(土) 09:43:53.90 AAS
>>599
599(1): 名無しさん@お腹いっぱい。 [sage] 2019/03/30(土) 02:31:35.90 AAS
(( a = 0 )) と (( a = それ以外の数値 )) の終了ステータス $? が
それぞれ1と0なんどけど仕様?(( a = 0.0 )) とかにしても1。
変数に設定された値自体が終了ステータスに影響するっておかしくない?

エラーがあると困るシェルスクリプトでは最初に set -e するようにしてるんだが
これじゃ (( )) で数値演算したいときに超困る
ちょっと調べてみた
まず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文の中に押し込むとか色々ある
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.043s