シェルスクリプト総合 その36

レス数が1000を超えています。これ以上書き込みはできません。
2021/02/25(木) 09:20:14.64ID:ZyJLXTlk
シェルスクリプトに関する総合スレッドです。

全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。
・「○○(他の言語)でいいやん」は禁止。他のスレに行ってください。

前スレ: シェルスクリプト総合 その35
https://mevius.5ch.net/test/read.cgi/tech/1606221440/

関連スレ
・【Bash】Windows Subsystem for Linux【WSL】9
https://mao.5ch.net/test/read.cgi/linux/1607589861/
・Bashでプログラミング [転載禁止](c)2ch.net
https://mao.5ch.net/test/read.cgi/linux/1443885102/
・シェルスクリプト総合 その28
https://mevius.5ch.net/test/read.cgi/unix/1533154936/
・zsh その7
https://mevius.5ch.net/test/read.cgi/unix/1337844883/
・過去UNIXで使われていた ksh というシェルについて
https://mevius.5ch.net/test/read.cgi/unix/1582358403/
・【POSIX】UNIXプログラミング【BSD】 [転載禁止](c)2ch.net
https://mevius.5ch.net/test/read.cgi/unix/1443103705/
・おまえら! shell は何を使っているんですか?
https://mevius.5ch.net/test/read.cgi/unix/1012330865/
2021/10/11(月) 20:08:45.72ID:AmMau6EN
>>973
失敗したら真を返すってC言語の場合だとどうかきたいの?

https://ja.wikipedia.org/wiki/%E3%83%96%E3%83%BC%E3%83%AA%E3%82%A2%E3%83%B3%E5%9E%8B#C99
> C99ではブーリアン型を格納したりするための型が作られ、その型のためのキーワード _Bool が追加された。
977デフォルトの名無しさん
垢版 |
2021/10/11(月) 22:58:31.30ID:Fcy0jrOe
>>976
Wikipediaで言うと

https://ja.m.wikipedia.org/wiki/終了ステータス

の意味論最終段
時には、終了ステータスをうまく設計し、呼び出した側のプログラムがそれをそのまま条件分岐のインデックスとして使うということも可能である。
の所かな。
結局、
>>975 ですよね。
2021/10/11(月) 23:33:54.95ID:0Us0xwCf
>>976
C API的には
EXIT_SUCCESS
EXIT_FAILURE 
を使う

前者は0であることが規格で決まってる

後者は0以外だが特に決まってない
特定の値、例えば1に依存したいならこのマクロは使ってはいけない
2021/10/11(月) 23:35:05.68ID:0Us0xwCf
>>973
マクロ名が成否なんで
2021/10/12(火) 00:23:03.15ID:4emiI4KE
>>978
「C API」とか言うヤツがどこまでわかってんだか。w
2021/10/12(火) 00:47:23.22ID:lvIpixgN
ルビーの国へさっさとお帰り
982デフォルトの名無しさん
垢版 |
2021/10/12(火) 02:14:19.27ID:jMkI4z1q
C/C++の関数は成功で1を返すのが多いと思う
strcmpみたいなのは例外

WindowsのAPIとかunixのシステムコールも基本的には同上だと思う

ところがシェルのコマンドとして観た場合 !0 は失敗で成功が 0
初心者はここで混乱する
2021/10/12(火) 02:50:11.86ID:qBBV2SpK
>>982
失敗の理由を返したくなったから
0以外で複数の値を取れるようにした
と覚えましょう
2021/10/12(火) 04:02:37.92ID:4emiI4KE
>>982
またええかげんなことを。。。

strcmpの戻り値は、成功か失敗かではなく、大小関係だから。

C標準関数、UNIXシステムコールの多くは、失敗時に-1、成功時は0や非負整数を返す。
ちなみにエラーの内容はグローバル変数errno。

初心者は、歴史的事情とか現実の適当さとかを知らない。
だから、まったくの別物にも、なにか統一的なルールがあるはず、と勝手に夢想して勝手に混乱してまう。

そんなヤツもじきにわかる。
ルールがあるとしたらただひとつ、ルールなんか存在しないのだということ。

つーか、ええから黙って覚えろ!
2021/10/12(火) 09:48:27.17ID:EPRomWCK
>>984
呆れるよな
全く真面目に勉強しようとせずに、勝手に理解したつもりとか
2021/10/12(火) 10:39:00.32ID:l2L6GWVJ
だからC言語で真偽値を返したいって言ってるんだろ!
987デフォルトの名無しさん
垢版 |
2021/10/12(火) 10:52:14.50ID:OF6dTiE4
関数とプログラムの返り値を一緒にするなよバカ
2021/10/12(火) 13:27:15.11ID:4emiI4KE
>>986
じゃあシェルスクリプトのスレに来んなよ!w
2021/10/12(火) 13:39:53.56ID:FcrICImt
>>982
まあ、これなんだよね(笑)
要はシェルスクリプトだけは成功やノーエラーは0でないとだめよん、と覚えておきゃいいだけよ。

他は他でそれぞれの流儀があるならそれに従いなさい、ってだけのこと。

まあ、どうしてもってんなら、シェルスクリプトで成功で1を返したっていいけど、あとあと面倒くさいことになるよ、ってだけ。
2021/10/12(火) 15:15:35.32ID:FcrICImt
つか、問題が少しずれてるんだな。
シェルスクリプトで、0がノーエラーでなければいけない理由はif文の条件式の判定が
特殊だから。
シェルスクリプトでは、
if C then; A else B fi
となってる場合、Cが0のときが真という扱いになっているから。
普通のプログラミング言語では、ここはCが0のときは偽、それ以外は真。
ここがシェルスクリプトの独特な点。
だから、成功は0を返しなさいよ、ってことになるわだ。
2021/10/12(火) 15:55:22.72ID:4emiI4KE
>>990
そもそも、シェルスクリプトのifの後に書けるのは条件式ではない。
条件式だとか思うから、ほかと違うんだ、特殊なんだと考えてしまったりして混乱する。

あくまでコマンドラインなんだから、ほかのプログラム言語を引き合いに出そうとした時点でもうおかしい。
2021/10/12(火) 16:22:35.41ID:FcrICImt
>>991
あくまでもコマンドライン、って考え方がもうおかしい(笑)
コマンドラインってのはあくまでも多少制限されているだけのスクリプトを書く場所、だよw

あと、ifの後に書くのは条件「式」だよ。そういう屁理屈こねたいなら、値ってのは式のうち、てくらいの常識はわきまえておいてねw
2021/10/12(火) 16:33:25.35ID:4emiI4KE
>>992
アホか。「式」とかイキってんな。w

まずシェルのmanページを通読してこいよ?な?
2021/10/12(火) 16:35:06.18ID:FcrICImt
>>93
アホか。「コマンドライン」とかイキってんな。w

ワンライナーはシェルスクリプトじゃない、とか強弁するつもりなのか、お前は?www
995デフォルトの名無しさん
垢版 |
2021/10/12(火) 16:37:10.01ID:FcrICImt
>>993
あとさ「プログラミング言語」ってものを
もう少し勉強しなさいね。
「式」くらいの用語で「イキっ」ちゃうようじゃ、こうい
話題に嘴はさむ資格がないよ。w
2021/10/12(火) 16:51:48.17ID:h64P2lE5
シェルスクリプトのifの後に書けるのは条件式ではない、コマンド
コマンドライン云々はif文のそこにではなく、シェルスクリプトがなんのためにってことだろう
まあ未だに他の言語と同じと言い張り、いろいろ理解力が足りないのにイキってるw奴には読めない理解できないんだろな
2021/10/12(火) 17:43:56.49ID:FcrICImt
>>996
コマンド呼び出しになるのは「式の値」が問題だからだよ。
ほんと面倒くさいな。true、falseコマンドも知らねーの?w
あくまもコマンドラインだから、シェルスクリプトはプログラムじゃない、プログラム言語じゃないと
強弁するつもりなの?w
あのさあ、俺が誰かなのかを下衆って勘繰る暇があるなら、コンピュータと日本語を
ちゃんと勉強しような?w
2021/10/12(火) 17:50:56.74ID:elEZT6pO
>>989
シェルスクリプトだけじゃなくてC言語も成功は0を返さないとだめだって言ってんだろ
頭大丈夫か?
2021/10/12(火) 17:51:17.62ID:elEZT6pO
次スレ

シェルスクリプト総合 その37
https://mevius.5ch.net/test/read.cgi/tech/1633441770/
2021/10/12(火) 17:52:21.03ID:elEZT6pO
はい、おしまい

真偽値と終了ステータスの区別もつかないのはアホ
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 229日 8時間 32分 7秒
レス数が1000を超えています。これ以上書き込みはできません。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況