シェルスクリプトに関する総合スレッドです。
全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。
・「○○(他の言語)でいいやん」は禁止。他のスレに行ってください。
・「POSIX原理主義」「ユニケージ」「USP研究所」はPOSIXとUnixを曲解し
間違ったシェルスクリプトを広めている宗教です。洗脳されないようにしてください。
前スレ: シェルスクリプト総合 その36
https://mevius.5ch.net/test/read.cgi/tech/1614212414/
関連スレ
・【Bash】Windows Subsystem for Linux【WSL】11
https://mao.5ch.net/test/read.cgi/linux/1627507889/
・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/
探検
シェルスクリプト総合 その37
■ このスレッドは過去ログ倉庫に格納されています
2021/10/05(火) 22:49:30.91ID:KsbWuyFp
2021/10/05(火) 22:50:14.38ID:KsbWuyFp
・特記なき場合、POSIX準拠シェルが既定です(古きBourneシェルはほぼ絶滅しました)
POSIX準拠シェルは(d)ash, bash, zsh, (m)ksh, yash, posh, (p)boshです
参考 https://unix.stackexchange.com/questions/145522/
特定のシェルの専用機能に依存する場合は明示しましょう(特にPOSIX準拠シェルではないfish, (t)csh等)
・POSIX準拠シェルのおすすめは?→多く使われているのはDebian/Ubuntu系のdashです
・bashでいいじゃん→bashがインストールされてない環境があります。環境によってデフォルトシェルの実体は異なります
Debian系 … dash CentOS系 … bash Alpine … busybox ash Android … mksh
FreeBSD … ash Solaris,OpenBSD … ksh
macOS … bash(Single UNIX Specification準拠のために一部動作が異なる)
・macOSはzshなんだよね?→ログインシェルがzshに変わっただけで/bin/shはbash 3.2です
・シェルスクリプトは可搬性を持たせるために可能な限りPOSIXに準拠しましょう
仕様 http://pubs.opengroup.org/onlinepubs/9699919799/
・シバンになにを使えばいいの?→POSIX準拠してるなら#!/bin/sh、bashなら#!/bin/bashか#!/usr/bin/env bash
・bash依存はなるべく避けましょう。自覚なきbashism。シバンが#!/bin/shなのにbashに依存する構文を使っていませんか?
・Bourneシェル(≒POSIXシェル)はPOSIX標準化前にUNIXで使われていたシェルで多くの亜種が存在します
Version 7 UNIXのshに一番近いのはOpenSolaris由来のHeirloom Bourne Shell、次点でSchily Bourne Shellのoboshです
Heirloom Bourne Shell: sh http://heirloom.sourceforge.net/sh.html
Schily Bourne Shell: obosh http://schilytools.sourceforge.net/bosh.html
歴史的資料 https://www.in-ulm.de/~mascheck/
・csh/tcshでのシェルスクリプトは*まったく推奨しません*
参考 http://www.speech-lab.org/~hiroki/csh-whynot.euc
・Linux/UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。Manページや各種リンクを見ましょう
・ワイルドカード・パターンは正規表現ではありません。正規表現の話題は正規表現スレへ
・シェル芸とシェルスクリプトは全く異なります
・シェルスクリプトのことをシェルってゆうな
POSIX準拠シェルは(d)ash, bash, zsh, (m)ksh, yash, posh, (p)boshです
参考 https://unix.stackexchange.com/questions/145522/
特定のシェルの専用機能に依存する場合は明示しましょう(特にPOSIX準拠シェルではないfish, (t)csh等)
・POSIX準拠シェルのおすすめは?→多く使われているのはDebian/Ubuntu系のdashです
・bashでいいじゃん→bashがインストールされてない環境があります。環境によってデフォルトシェルの実体は異なります
Debian系 … dash CentOS系 … bash Alpine … busybox ash Android … mksh
FreeBSD … ash Solaris,OpenBSD … ksh
macOS … bash(Single UNIX Specification準拠のために一部動作が異なる)
・macOSはzshなんだよね?→ログインシェルがzshに変わっただけで/bin/shはbash 3.2です
・シェルスクリプトは可搬性を持たせるために可能な限りPOSIXに準拠しましょう
仕様 http://pubs.opengroup.org/onlinepubs/9699919799/
・シバンになにを使えばいいの?→POSIX準拠してるなら#!/bin/sh、bashなら#!/bin/bashか#!/usr/bin/env bash
・bash依存はなるべく避けましょう。自覚なきbashism。シバンが#!/bin/shなのにbashに依存する構文を使っていませんか?
・Bourneシェル(≒POSIXシェル)はPOSIX標準化前にUNIXで使われていたシェルで多くの亜種が存在します
Version 7 UNIXのshに一番近いのはOpenSolaris由来のHeirloom Bourne Shell、次点でSchily Bourne Shellのoboshです
Heirloom Bourne Shell: sh http://heirloom.sourceforge.net/sh.html
Schily Bourne Shell: obosh http://schilytools.sourceforge.net/bosh.html
歴史的資料 https://www.in-ulm.de/~mascheck/
・csh/tcshでのシェルスクリプトは*まったく推奨しません*
参考 http://www.speech-lab.org/~hiroki/csh-whynot.euc
・Linux/UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。Manページや各種リンクを見ましょう
・ワイルドカード・パターンは正規表現ではありません。正規表現の話題は正規表現スレへ
・シェル芸とシェルスクリプトは全く異なります
・シェルスクリプトのことをシェルってゆうな
3デフォルトの名無しさん
2021/10/06(水) 17:20:42.12ID:XJEs7oM2 2ゲット
4デフォルトの名無しさん
2021/10/08(金) 03:54:38.51ID:LzOvy0cf 3げと
5デフォルトの名無しさん
2021/10/09(土) 07:02:28.75ID:F/g3bnt2 げっとわいるど
6デフォルトの名無しさん
2021/10/12(火) 17:53:02.51ID:elEZT6pO つーか真偽値の問題じゃなくて
シェルスクリプトのifが終了ステータスを判断するコマンドってだけだろ
シェルスクリプトのifが終了ステータスを判断するコマンドってだけだろ
7デフォルトの名無しさん
2021/10/12(火) 17:54:35.21ID:elEZT6pO あとシェル関数が返すのも終了ステータス
戻り値じゃない、そもそも終了ステータスしか返せないだろ
returnだからって他の言語のretruntを同じだと思うなよ
戻り値じゃない、そもそも終了ステータスしか返せないだろ
returnだからって他の言語のretruntを同じだと思うなよ
2021/10/12(火) 17:59:10.51ID:FcrICImt
>>6
だから真偽値の問題でしょw
お前、いい加減自分で何言ってるかわかってないだろw
それを言ったらC言語のifだって値を判断するだけのコマンド(文)って
なっちゃうだろwww
だれかがboolean型持ち出したから、混乱してんのかもしれないけど、
昔のC言語にはそんな型ねーからな?w
だから真偽値の問題でしょw
お前、いい加減自分で何言ってるかわかってないだろw
それを言ったらC言語のifだって値を判断するだけのコマンド(文)って
なっちゃうだろwww
だれかがboolean型持ち出したから、混乱してんのかもしれないけど、
昔のC言語にはそんな型ねーからな?w
2021/10/12(火) 18:01:19.29ID:FcrICImt
結局、Cでも(その他でも)シェルスクリプトでさえも、
ifってのは式の値を真偽に判断するものなんだよ。
ifってのは式の値を真偽に判断するものなんだよ。
2021/10/12(火) 18:04:36.01ID:FcrICImt
だから、シェルスクリプトが他と違って特殊なのは、
式の値を0の場合を真と判断するところ、だけだよ。
それがexit statusであるかとかは全く関係がない。
要点はそこだけ。
式の値を0の場合を真と判断するところ、だけだよ。
それがexit statusであるかとかは全く関係がない。
要点はそこだけ。
2021/10/12(火) 18:05:26.22ID:h64P2lE5
>>ID:FcrICImt
本当に、前スレ>>984で言われた通りだな
if command; then
で、commandのとこにコマンドを書いたことないのか?
プログラミングにおいて、問題なく実行できたら別にどうとかはないが、失敗した時には原因が欲しいのは当然
コマンドの実行においても同じ。だから、成功できた場合は 0 で、それ以外の値は失敗になるのも当然。エラーの場合のExit Statusの値を規定できてなかった/してなかったからから「含み」を持たせてるだけになってるが
(よくわからんが、JCLとやらも同じそう)
>シェルスクリプトで、0がノーエラーでなければいけない理由はif文の条件式の判定が
>特殊だから。
逆だよ、上に書いてある通り、また、前スレ>>936のK&Rが言っている通り、0 が正常(お前の言う「真」)が先だよ
シェルスクリプトがコマンドを実行するためのものなんだから、成功=0(=お前の言う「真」)とするのも独特でもなんでもないな。他の言語と比べると独特と見えるのかもだが
command && command
とか、常識的に見えるだろ?上手く整合性があるようにできてるんだよ
つづく
本当に、前スレ>>984で言われた通りだな
if command; then
で、commandのとこにコマンドを書いたことないのか?
プログラミングにおいて、問題なく実行できたら別にどうとかはないが、失敗した時には原因が欲しいのは当然
コマンドの実行においても同じ。だから、成功できた場合は 0 で、それ以外の値は失敗になるのも当然。エラーの場合のExit Statusの値を規定できてなかった/してなかったからから「含み」を持たせてるだけになってるが
(よくわからんが、JCLとやらも同じそう)
>シェルスクリプトで、0がノーエラーでなければいけない理由はif文の条件式の判定が
>特殊だから。
逆だよ、上に書いてある通り、また、前スレ>>936のK&Rが言っている通り、0 が正常(お前の言う「真」)が先だよ
シェルスクリプトがコマンドを実行するためのものなんだから、成功=0(=お前の言う「真」)とするのも独特でもなんでもないな。他の言語と比べると独特と見えるのかもだが
command && command
とか、常識的に見えるだろ?上手く整合性があるようにできてるんだよ
つづく
2021/10/12(火) 18:05:36.77ID:h64P2lE5
つづき
真偽に拘りたい真偽でしか理解できないなら、
他の言語は 「評価式の結果 != 0」
シェルスクリプトは「コマンドを実行した Exist Status == 0」
がどちらも暗黙的に行われてると思えばいいだろ
これなら純粋(=完全な2値になる)真偽だしな
他の言語で
value = 何か
if (value != 0)
...
シェルスクリプト
if コマンドのExit Status == 0; then
...
前スレ>>989なんて言ってるけど、確かにWindows APIはBooleanで返すのが多い
だがそれはWindows APIの文化でしかない、シェルスクリプトの本家wであるUnixで何か書いたことがあるなら文化が違うとわかりそうなもんだが、なぜかWindows APIのが全てと言ってそうな前スレ>>989
WSLからのにわかか?
何かまだ言い張ってるなあ
真偽に拘りたい真偽でしか理解できないなら、
他の言語は 「評価式の結果 != 0」
シェルスクリプトは「コマンドを実行した Exist Status == 0」
がどちらも暗黙的に行われてると思えばいいだろ
これなら純粋(=完全な2値になる)真偽だしな
他の言語で
value = 何か
if (value != 0)
...
シェルスクリプト
if コマンドのExit Status == 0; then
...
前スレ>>989なんて言ってるけど、確かにWindows APIはBooleanで返すのが多い
だがそれはWindows APIの文化でしかない、シェルスクリプトの本家wであるUnixで何か書いたことがあるなら文化が違うとわかりそうなもんだが、なぜかWindows APIのが全てと言ってそうな前スレ>>989
WSLからのにわかか?
何かまだ言い張ってるなあ
2021/10/12(火) 18:06:45.20ID:FcrICImt
あ、あとついでに言っとくと、終了コードを判断するしかないのは、シェルスクリプト
はそれ自体がそもそも計算ができないからw
そうならざるを得ないのは、この点にかかるw
はそれ自体がそもそも計算ができないからw
そうならざるを得ないのは、この点にかかるw
2021/10/12(火) 18:09:14.05ID:h64P2lE5
もうにわかの勝手な妄想爆発と思うしかないなw
2021/10/12(火) 18:16:00.36ID:FcrICImt
ID:h64P2lE5はそもそもプログラミング言語というものを理解できてないんだなw
いや、プログラミングが理解できてないのか?w
あと日本語も多分理解できてないんだろうなw
で、結局、ID:h64P2lE5は何が言いたいんだ?w
もうさっぱり分からんよw
いや、プログラミングが理解できてないのか?w
あと日本語も多分理解できてないんだろうなw
で、結局、ID:h64P2lE5は何が言いたいんだ?w
もうさっぱり分からんよw
2021/10/12(火) 18:19:01.30ID:FcrICImt
2021/10/12(火) 18:20:12.34ID:h64P2lE5
2021/10/12(火) 18:21:35.92ID:h64P2lE5
2021/10/12(火) 18:22:26.42ID:FcrICImt
2021/10/12(火) 18:24:29.03ID:h64P2lE5
>プログラミング言語というものを理解できてないんだなw
>いや、プログラミングが理解できてないのか?w
>あと日本語も多分理解できてないんだろうなw
>シェルスクリプト以外のプログラミング言語を少しは勉強したら
>つかシェルスクリプトも書けそうな気がしねーけどな
>お前の文章は支離滅裂で関係ないところにあっちこっち飛ぶから
すげえな、改めて見ると。この異常さは何か察してしまうな
>いや、プログラミングが理解できてないのか?w
>あと日本語も多分理解できてないんだろうなw
>シェルスクリプト以外のプログラミング言語を少しは勉強したら
>つかシェルスクリプトも書けそうな気がしねーけどな
>お前の文章は支離滅裂で関係ないところにあっちこっち飛ぶから
すげえな、改めて見ると。この異常さは何か察してしまうな
2021/10/12(火) 18:25:31.96ID:FcrICImt
>>18
「根本的なプログラミング/プログラミング言語の誤った理解」をしているのはお前だよw
例えば、Cでさ、
if (0) {printf("true");}else {printf("false")}
として実行したら何が表示されると思う?w
trueが表示されると思ってる?w
「根本的なプログラミング/プログラミング言語の誤った理解」をしているのはお前だよw
例えば、Cでさ、
if (0) {printf("true");}else {printf("false")}
として実行したら何が表示されると思う?w
trueが表示されると思ってる?w
2021/10/12(火) 18:27:51.86ID:h64P2lE5
2021/10/12(火) 18:28:56.01ID:FcrICImt
2021/10/12(火) 18:29:58.72ID:h64P2lE5
2021/10/12(火) 18:30:33.61ID:h64P2lE5
読まないやつのはもう知らんぞ
2021/10/12(火) 18:30:59.65ID:FcrICImt
2021/10/12(火) 18:32:00.93ID:FcrICImt
2021/10/12(火) 18:32:21.39ID:h64P2lE5
2021/10/12(火) 18:34:03.18ID:h64P2lE5
2021/10/12(火) 18:34:40.41ID:FcrICImt
2021/10/12(火) 18:37:47.06ID:FcrICImt
あーあ、ミスってしまったw
そもそも==ってのは比較演算子であって、値を算出するものだ、ってのは理解してるかな?w
ま、読まないし、聞かないし、基礎もだめ、なのを相手にしても無益か。
ID:h64P2lE5
は結局、核心を突かれた質問をされると相手を罵倒して逃げるだけのクズだということでw
そもそも==ってのは比較演算子であって、値を算出するものだ、ってのは理解してるかな?w
ま、読まないし、聞かないし、基礎もだめ、なのを相手にしても無益か。
ID:h64P2lE5
は結局、核心を突かれた質問をされると相手を罵倒して逃げるだけのクズだということでw
2021/10/12(火) 18:38:48.32ID:h64P2lE5
2021/10/12(火) 18:39:27.41ID:h64P2lE5
>>31
また変なこと言い出してるw
また変なこと言い出してるw
2021/10/12(火) 18:40:50.86ID:h64P2lE5
2021/10/12(火) 18:43:19.24ID:h64P2lE5
2021/10/12(火) 18:46:33.75ID:FcrICImt
>>34
お前さ、本当に俺の書いてあること読めてる?理解できる?
お前のようなやつを「おさとが知れる」っていうんだぞ?w
ボキャも貧弱で、おまえの日本語能力すらも程度が知れるんだがw
だからさ、結局、何が言いたいの?w
シェルスクリプトの真偽判定は特殊ではない、
Cと同じだ、と言いたいの?w
で、それは違うよ、って言ってるんだけど、まだ分からない?
日本語が理解できないの?w
お前さ、本当に俺の書いてあること読めてる?理解できる?
お前のようなやつを「おさとが知れる」っていうんだぞ?w
ボキャも貧弱で、おまえの日本語能力すらも程度が知れるんだがw
だからさ、結局、何が言いたいの?w
シェルスクリプトの真偽判定は特殊ではない、
Cと同じだ、と言いたいの?w
で、それは違うよ、って言ってるんだけど、まだ分からない?
日本語が理解できないの?w
2021/10/12(火) 18:49:13.63ID:FcrICImt
あと、なんで、そんなに自分の発言引用したがるの?ID:h64P2lE5
自作自演してるの?w
自作自演してるの?w
2021/10/12(火) 18:50:53.32ID:h64P2lE5
2021/10/12(火) 18:58:52.25ID:FcrICImt
>>38
!=
ってのが比較演算子であって、計算をしている、ってのは理解できる?
「0 != 0 は純粋な二値Booleanになる」
ここが判ってないな、と思うわw
プログラミング言語ってのはそれをBooleanにしてるわけじゃないんだよw
「0かそれ以外」に分けてるだけなんだよw
(アセンブラを分かれば、こんなことは自明なんだけどねw)
概念的にbooleanと言ってるかもしれないけど、それは単に概念的な話であって、
実際とは違う。
ま、比較演算子については1か0かしか返さないよ。
でも、それは比較演算子だから、であって、例えば、算術演算子使って
if ( 1+1 ) {..}
でも成立するってのはわかってる?w
!=
ってのが比較演算子であって、計算をしている、ってのは理解できる?
「0 != 0 は純粋な二値Booleanになる」
ここが判ってないな、と思うわw
プログラミング言語ってのはそれをBooleanにしてるわけじゃないんだよw
「0かそれ以外」に分けてるだけなんだよw
(アセンブラを分かれば、こんなことは自明なんだけどねw)
概念的にbooleanと言ってるかもしれないけど、それは単に概念的な話であって、
実際とは違う。
ま、比較演算子については1か0かしか返さないよ。
でも、それは比較演算子だから、であって、例えば、算術演算子使って
if ( 1+1 ) {..}
でも成立するってのはわかってる?w
2021/10/12(火) 19:03:07.20ID:h64P2lE5
>>39
んー...
誤 >>11の冒頭でも書いてるけど、
正 >>12の冒頭でも書いてるけど、
な。すまん
>>36
11に既に書いてる
わかりづらいのはあるかもだがw、もう根本的にはお前の理解不足(知見の無ささによる)としか思えんから、頑張って読んでね
>>39
「計算」をした結果が、純粋な二値Booleanになるんだけど?
自分で「比較演算子については1か0かしか返さないよ」って書いてるくせに何を言ってるの?
だから暗黙的に != 0 がされてると「思え」と言ってるんだが、まだわからんのだが
if ( (1+1) != 0 ) {..}
ってことがわからないんだな...知識が無さすぎだろう
んー...
誤 >>11の冒頭でも書いてるけど、
正 >>12の冒頭でも書いてるけど、
な。すまん
>>36
11に既に書いてる
わかりづらいのはあるかもだがw、もう根本的にはお前の理解不足(知見の無ささによる)としか思えんから、頑張って読んでね
>>39
「計算」をした結果が、純粋な二値Booleanになるんだけど?
自分で「比較演算子については1か0かしか返さないよ」って書いてるくせに何を言ってるの?
だから暗黙的に != 0 がされてると「思え」と言ってるんだが、まだわからんのだが
if ( (1+1) != 0 ) {..}
ってことがわからないんだな...知識が無さすぎだろう
2021/10/12(火) 19:10:50.57ID:FcrICImt
>>40
>「計算」をした結果が、純粋な二値Booleanになるんだけど?
だから、そこが判ってないだろw
「二値Booleanになる」のではなくて、「二値Booleanとして判断する」だけ。
だから、「思え」とかいうお前の独善的な命令なんか知ったことじゃないん
だってw
> if ( (1+1) != 0 ) {..}
> ってことがわからないんだな...知識が無さすぎだろう
だから、お前がそう理解したい、って言うんなら、それは間違いではない、とは言ってやるよw
でも、それは「正しい」わけじゃないし、「唯一の間違いじゃない解」でもないんだよ。
頭悪すぎだよ、お前。
あとさ、本当に俺の書いたことをお前は読んだの?俺の言いたいことはちゃんと書いてあるし、
理解できるのなら、お前は俺に対して行った数々の暴言を詫びるべきじゃないかな。
>「計算」をした結果が、純粋な二値Booleanになるんだけど?
だから、そこが判ってないだろw
「二値Booleanになる」のではなくて、「二値Booleanとして判断する」だけ。
だから、「思え」とかいうお前の独善的な命令なんか知ったことじゃないん
だってw
> if ( (1+1) != 0 ) {..}
> ってことがわからないんだな...知識が無さすぎだろう
だから、お前がそう理解したい、って言うんなら、それは間違いではない、とは言ってやるよw
でも、それは「正しい」わけじゃないし、「唯一の間違いじゃない解」でもないんだよ。
頭悪すぎだよ、お前。
あとさ、本当に俺の書いたことをお前は読んだの?俺の言いたいことはちゃんと書いてあるし、
理解できるのなら、お前は俺に対して行った数々の暴言を詫びるべきじゃないかな。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 高市首相答弁を“引き出した”立民・岡田克也氏が改めて説明「なぜ慎重な答弁をされなかったのか。非常に残念に思っている」 ★10 [ぐれ★]
- トランプ氏「台湾侵攻すれば北京爆撃」“過激予告発言”報道がXで再燃「高市氏の1億倍やばい」 [七波羅探題★]
- 【維新国会議員が800万円超の公金を使用】藤田文武共同代表が印刷代569万円を維新市議の「身内企業に支出」していた! [ぐれ★]
- 【ペルソナ・ノン・グラータ】中国総領事の早期国外退去を首相に要請へ 自民・保守系グループ「日本の尊厳と国益を護(まも)る会」 [ぐれ★]
- 「母の部屋に安倍氏が表紙の機関誌が」「(安倍氏が被害者なのは)不思議に思いませんでした」山上被告の妹が証言 ★2 [おっさん友の会★]
- 【(・(ェ)・)】収穫前のリンゴ2トン!丸々と太ったクマがリンゴ畑に連日現れ…一晩中居座る「こんなに食べられたのは初めて」長野・上田 [ぐれ★]
- 安倍晋三さん、完全にチェックアウトしてしまう…「母の部屋に安倍元首相が表紙の旧統一教会の機関誌があった」 [405019576]
- 中国報道、高市首相を「毒苗」と中傷😡 [399259198]
- 【高市悲報】🇨🇳中国「日本への報復措置? 他にいくらでも方法はある。 まだまだやめないよ」 😨😱 [485983549]
- 【悲報】日本、パンダ0にwwwwwwwwwwww高市さんありがとう🐼 [271912485]
- 高市早苗、約1ヶ月でドル円・10円円安を達成 [256556981]
- 高市さん「自賠責を勝手に他の財源に充てるな、返せ」財務省さん、しぶしぶ5700億円を返還 [881878332]
