X



シェルスクリプト総合 その36
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
垢版 |
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/
0953デフォルトの名無しさん
垢版 |
2021/10/05(火) 05:07:50.98ID:h//Q5yAA
終了ステータスは、真偽値じゃなくて数値だからね
127 はコマンドが見つからないとか、いろんな意味がある
0954デフォルトの名無しさん
垢版 |
2021/10/05(火) 11:37:08.32ID:BsTkn0yK
>>953
これ、アプリが127を返すようだと区別できないな。
ビットはあまりがちなんだから、ちゃんと整理しといてほしかった。
0956デフォルトの名無しさん
垢版 |
2021/10/05(火) 15:22:23.47ID:Vzh0q/ov
と思ったらcのが早いのか…
当時ナウかったalgolの影響大きすぎて錯覚する(fiとかesacとか)
0957デフォルトの名無しさん
垢版 |
2021/10/05(火) 15:28:38.07ID:k2GS0F1f
algolは死んだしcを新参と笑えるバリバリ現役言語はlisp、fortran、cobolくらいでは
0960デフォルトの名無しさん
垢版 |
2021/10/05(火) 18:52:58.49ID:JbR3YU6O
科学臭
0964デフォルトの名無しさん
垢版 |
2021/10/05(火) 22:05:00.71ID:I9nBHPaT
忘れられがちなPL/I
0965デフォルトの名無しさん
垢版 |
2021/10/06(水) 10:50:03.14ID:1RiK8cCJ
>>963
3型文法の形式言語です
Turing完全ではないので一般的にはプログラミング言語とは言いません
0967デフォルトの名無しさん
垢版 |
2021/10/09(土) 22:37:14.17ID:IfT7mukr
俺もUNIXプログラミング環境持ってるけど、真と偽をtrueとそれ以外(false)って感じで書いてある。シェルスクリプトで真偽と言うとこれだよな。一般的な真偽値とはまた別で。
それにifは真かそれ以外かしか見れないんだから真偽値で言う偽なんざいらねーし。
0970デフォルトの名無しさん
垢版 |
2021/10/10(日) 12:09:43.32ID:ZbbT3pWR
>>969
Unixプログラミング環境、今となっては結構レアな本だと思ってたけどみんな持ってるのか。
特に邦訳版から読んでそれ以降使い込まなかった人はシェルスクリプトの真偽はゼロかそれ以外って覚えてても不思議はないと思うな。
0971デフォルトの名無しさん
垢版 |
2021/10/10(日) 17:16:50.58ID:Liv3MhTX
不思議もなにも、それしかないからな。
勝手に意味付けしようと思い込むヤツが勝手にややこしくできあがってるだけで。
0972デフォルトの名無しさん
垢版 |
2021/10/11(月) 07:02:29.47ID:0Us0xwCf
真偽じゃなくて成否なんだよ
Exit statusは
否は複数あっていい
&&や||はexit statusに関連する成否を扱う演算なんだ
どこにどう書いてあろうが、本質はそれ以外にない

「関連する」と書いたのは
$ not-exist-command || echo hello world
not-exist-command: command not found
hello world
$ not-exist-command && echo hello world
not-exist-command: command not found
$
これはexit statusじゃないから
0973デフォルトの名無しさん
垢版 |
2021/10/11(月) 09:50:35.87ID:j+pkxrpN
>>972
うーん、失敗したら真を返すプログラムも書きたいから、スクリプト側では成否と言う概念や言葉を使うより真偽の方がやりやすいんじゃないの?
0974デフォルトの名無しさん
垢版 |
2021/10/11(月) 17:46:38.27ID:FYumYboV
>>972
いや、それもexit status。
man bash(COMMAND EXECUTION)にもはっきりそう書いてある。

プログラムとパイプライン各段、終了ステータスを出すほうと受けるほうで混乱すんなよ。
0977デフォルトの名無しさん
垢版 |
2021/10/11(月) 22:58:31.30ID:Fcy0jrOe
>>976
Wikipediaで言うと

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

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

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

後者は0以外だが特に決まってない
特定の値、例えば1に依存したいならこのマクロは使ってはいけない
0982デフォルトの名無しさん
垢版 |
2021/10/12(火) 02:14:19.27ID:jMkI4z1q
C/C++の関数は成功で1を返すのが多いと思う
strcmpみたいなのは例外

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

ところがシェルのコマンドとして観た場合 !0 は失敗で成功が 0
初心者はここで混乱する
0984デフォルトの名無しさん
垢版 |
2021/10/12(火) 04:02:37.92ID:4emiI4KE
>>982
またええかげんなことを。。。

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

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

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

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

つーか、ええから黙って覚えろ!
0987デフォルトの名無しさん
垢版 |
2021/10/12(火) 10:52:14.50ID:OF6dTiE4
関数とプログラムの返り値を一緒にするなよバカ
0989デフォルトの名無しさん
垢版 |
2021/10/12(火) 13:39:53.56ID:FcrICImt
>>982
まあ、これなんだよね(笑)
要はシェルスクリプトだけは成功やノーエラーは0でないとだめよん、と覚えておきゃいいだけよ。

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

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

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

あと、ifの後に書くのは条件「式」だよ。そういう屁理屈こねたいなら、値ってのは式のうち、てくらいの常識はわきまえておいてねw
0994デフォルトの名無しさん
垢版 |
2021/10/12(火) 16:35:06.18ID:FcrICImt
>>93
アホか。「コマンドライン」とかイキってんな。w

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


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。