シェルスクリプトに関する総合スレッドです。
全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。
・「○○(他の言語)でいいやん」は禁止。他のスレに行ってください。
シェルスクリプト総合 その31
https://mevius.5ch.net/test/read.cgi/tech/1565446670/
探検
シェルスクリプト総合 その32
レス数が1000を超えています。これ以上書き込みはできません。
2019/10/25(金) 00:08:45.53ID:6btPTvif
945デフォルトの名無しさん
2020/03/21(土) 13:55:11.55ID:VWAuyUcc 自分もなんでもかんでもシェルスクリプトでできるような知識を持つことだな
そんな誰か頼りではなくて
なんでもかんでも自分でもできるがしないじゃないとぶちのめせないだろ
そんな誰か頼りではなくて
なんでもかんでも自分でもできるがしないじゃないとぶちのめせないだろ
946デフォルトの名無しさん
2020/03/21(土) 14:08:20.00ID:FH3PvP3D >>944
シェルスクリプトではなくプログラミング言語を使った方がいいケースがこれまでにもあったということだろ。それならそのケースについて他の方法でやった方が良い理由を具体的に説明すればいいんでないの?
シェルスクリプトではなくプログラミング言語を使った方がいいケースがこれまでにもあったということだろ。それならそのケースについて他の方法でやった方が良い理由を具体的に説明すればいいんでないの?
947デフォルトの名無しさん
2020/03/21(土) 14:33:14.95ID:Nklv0DXu x=x
a=
b=
if [ $a = $b ]; then # 構文エラーw
fi
空文字で構文エラーになるから、下のように双方に、1文字ずつ追加して比べるw
面倒くさい
if [ $a$x = $b$x ]; then
echo $a$x #=> x
fi
a=
b=
if [ $a = $b ]; then # 構文エラーw
fi
空文字で構文エラーになるから、下のように双方に、1文字ずつ追加して比べるw
面倒くさい
if [ $a$x = $b$x ]; then
echo $a$x #=> x
fi
948デフォルトの名無しさん
2020/03/21(土) 17:00:58.81ID:EuPu7JS3 単にシェルでのコマンドに引数を与える時の一般規則
xなどつけるのが嫌なら "で囲めばいいだけだろ
xなどつけるのが嫌なら "で囲めばいいだけだろ
949デフォルトの名無しさん
2020/03/21(土) 17:17:50.80ID:57M5Xw8A950デフォルトの名無しさん
2020/03/21(土) 17:24:03.05ID:He36jL2X951デフォルトの名無しさん
2020/03/21(土) 20:36:22.88ID:57M5Xw8A952デフォルトの名無しさん
2020/03/21(土) 21:07:17.99ID:9LT6s2kW # This gives a "too many arguments" error as f* is expanded to the
# contents of the current directory
if [ "filename" == f* ]; then
echo "Match"
fi
とかどういう層向けのなんだろな。なんか上にいるのと同じレベル向けとしか思えない
echo "filename" == f* ]
などとまったく同じなのに、[ ] が何か特別(スクリプト構文?)とでも思ってしまう割と最近始めましたな人用かと思ってしまうな
# contents of the current directory
if [ "filename" == f* ]; then
echo "Match"
fi
とかどういう層向けのなんだろな。なんか上にいるのと同じレベル向けとしか思えない
echo "filename" == f* ]
などとまったく同じなのに、[ ] が何か特別(スクリプト構文?)とでも思ってしまう割と最近始めましたな人用かと思ってしまうな
953デフォルトの名無しさん
2020/03/21(土) 22:20:10.01ID:ys6caT0H >>947
引数は""で囲むのは常識。shellcheckでも指摘される。
引数は""で囲むのは常識。shellcheckでも指摘される。
954デフォルトの名無しさん
2020/03/22(日) 00:45:59.87ID:7aOor4nW955デフォルトの名無しさん
2020/03/22(日) 05:06:02.12ID:5UlsRo7e >どんな言語だって1つの関数が100行超えるようならやめるべきだし
これもよくわからんけどなあ
最初に一回だーっと降りてくるだけの処理を
こまこまこまこま関数に分けたがる奴はなんなん?と思う
シェルスクリプトなんか大体そういう処理だけだろ?
これもよくわからんけどなあ
最初に一回だーっと降りてくるだけの処理を
こまこまこまこま関数に分けたがる奴はなんなん?と思う
シェルスクリプトなんか大体そういう処理だけだろ?
956デフォルトの名無しさん
2020/03/22(日) 05:49:25.01ID:7aOor4nW >>955
え?シェルスクリプトで外部コマンド使わんの?
最初に一回だーっと降りてくるだけの処理でも
その中の一部を外部コマンドとか関数にするでしょ?
再利用するとか、そこだけ実行できるようにするために。
え?シェルスクリプトで外部コマンド使わんの?
最初に一回だーっと降りてくるだけの処理でも
その中の一部を外部コマンドとか関数にするでしょ?
再利用するとか、そこだけ実行できるようにするために。
957デフォルトの名無しさん
2020/03/22(日) 05:55:46.13ID:7aOor4nW あと「関数や処理が長くなったら分けるよね」という
技術的な話に対して「分ける」or「分けない」とは無関係な
「俺はシェルスクリプトで長い処理は作らない」という
個人的な話をごちゃまぜにしないでくれ
「分けるよね?」の答えにはなってないから。
技術的な話に対して「分ける」or「分けない」とは無関係な
「俺はシェルスクリプトで長い処理は作らない」という
個人的な話をごちゃまぜにしないでくれ
「分けるよね?」の答えにはなってないから。
958デフォルトの名無しさん
2020/03/22(日) 07:35:58.24ID:5UlsRo7e959デフォルトの名無しさん
2020/03/22(日) 07:52:15.98ID:7aOor4nW >>958
じゃあ何で分けるのさ?
じゃあ何で分けるのさ?
960デフォルトの名無しさん
2020/03/22(日) 09:08:29.58ID:c5TE3idF >どんな言語だって1つの関数が100行超えるようならやめるべきだし
を何度読んでも、そのとおりとしか?
を何度読んでも、そのとおりとしか?
961デフォルトの名無しさん
2020/03/22(日) 10:24:47.84ID:I5Su+SV6 GoogleのStyle Guideには100行超えるようなスクリプトを書いてるなら
今すぐもっと構造化された言語で書き直すべきって書いてる
>If you are writing a script that is more than 100 lines long,
>or that uses non-straightforward control flow logic,
>you should rewrite it in a more structured language now.
関数の長さじゃなくスクリプトの長さの話
似てるけど持ってる意味合いが違う
今すぐもっと構造化された言語で書き直すべきって書いてる
>If you are writing a script that is more than 100 lines long,
>or that uses non-straightforward control flow logic,
>you should rewrite it in a more structured language now.
関数の長さじゃなくスクリプトの長さの話
似てるけど持ってる意味合いが違う
962デフォルトの名無しさん
2020/03/22(日) 12:56:41.04ID:tFupwLj7 シェルスクリプトも十分構造化されてると思うんだけどねぇ。
まあ,Pythonとかに比べれば,メッソドや継承とかそういう概念が備わってない意味では低級だけど,
「シェルスクリプトで巨大なプログラムを書くべきでない理由」として
「シェルスクリプトは*構造的*でないから」ってのはちょっと頂けない。
シェルスクリプトには構造化プログラミングを支援する機能(函数定義,局所変数)が備わってる以上,
構造化されてないシェルスクリプトがあったならそれは書いた人間の責任であって,
もっと言うとそういうシェルスクリプトを書くような人間は,
Pythonであっても,用意されたオブジェクト指向の機能なんて使わずに,ひたすら手続き的なプログラムを書くだろう。
まあ,Pythonとかに比べれば,メッソドや継承とかそういう概念が備わってない意味では低級だけど,
「シェルスクリプトで巨大なプログラムを書くべきでない理由」として
「シェルスクリプトは*構造的*でないから」ってのはちょっと頂けない。
シェルスクリプトには構造化プログラミングを支援する機能(函数定義,局所変数)が備わってる以上,
構造化されてないシェルスクリプトがあったならそれは書いた人間の責任であって,
もっと言うとそういうシェルスクリプトを書くような人間は,
Pythonであっても,用意されたオブジェクト指向の機能なんて使わずに,ひたすら手続き的なプログラムを書くだろう。
963デフォルトの名無しさん
2020/03/22(日) 13:04:15.24ID:c5TE3idF964デフォルトの名無しさん
2020/03/22(日) 14:10:38.21ID:An20OwGu965デフォルトの名無しさん
2020/03/22(日) 14:27:24.29ID:Hw+To0D5 何を絡んでいるんだか
966デフォルトの名無しさん
2020/03/22(日) 14:32:07.41ID:Hw+To0D5 結論、初心者も視野に大いに入っている規約。ある意味初心者に合わせた
だから、100行についてあれこれ議論してもしょうがないよ、Googleにコード提供するわけでもなし変だと思うならふーんと無視だなw
だから、100行についてあれこれ議論してもしょうがないよ、Googleにコード提供するわけでもなし変だと思うならふーんと無視だなw
967デフォルトの名無しさん
2020/03/22(日) 15:21:02.01ID:I5Su+SV6 >>962
同じロジックでも行数は全然違ってくるよ
shやbashには型がないのと原始的エラーハンドリング機構しかないのが大きい
他にも高階関数がまともに書けないし
一般的な言語に用意されてる便利メソッドもないし
モジュール化機能も関数とファイル以外に無い
読みやすさ、メンテしやすさ、テストのしやすさの点から
シェルスクリプトの限界を認識して節度を持って使おうねってのが
Googleのガイドの意図だと思う
同じロジックでも行数は全然違ってくるよ
shやbashには型がないのと原始的エラーハンドリング機構しかないのが大きい
他にも高階関数がまともに書けないし
一般的な言語に用意されてる便利メソッドもないし
モジュール化機能も関数とファイル以外に無い
読みやすさ、メンテしやすさ、テストのしやすさの点から
シェルスクリプトの限界を認識して節度を持って使おうねってのが
Googleのガイドの意図だと思う
968デフォルトの名無しさん
2020/03/22(日) 15:21:37.48ID:I5Su+SV6 >>967
アンカ間違えた
アンカ間違えた
969デフォルトの名無しさん
2020/03/22(日) 15:48:56.43ID:c5TE3idF >>967
型がないのは他にも有るだろ
エラーハンドリングも例外がない言語はいくらでもある
高階関数はevalで関数をよびだすことができるので同等のことは出来る
メソッドはオブジェクト指向じゃないから関数として
外部コマンド=シェルスクリプトの関数なんだからたくさんある
モジュール化機能って関数とファイル以外に何が必要なんだ?
> シェルスクリプトの限界を認識して
その限界の理由がはっきり書かれてない。
読みやすさが悪い、メンテしやすさが悪い、テストのしやすさが悪い
という"結論"を言ってるが理由がない
型がないのは他にも有るだろ
エラーハンドリングも例外がない言語はいくらでもある
高階関数はevalで関数をよびだすことができるので同等のことは出来る
メソッドはオブジェクト指向じゃないから関数として
外部コマンド=シェルスクリプトの関数なんだからたくさんある
モジュール化機能って関数とファイル以外に何が必要なんだ?
> シェルスクリプトの限界を認識して
その限界の理由がはっきり書かれてない。
読みやすさが悪い、メンテしやすさが悪い、テストのしやすさが悪い
という"結論"を言ってるが理由がない
970デフォルトの名無しさん
2020/03/22(日) 16:56:26.48ID:I5Su+SV6 >>969
>型がないのは他にも有るだろ
例えば?
>エラーハンドリングも例外がない言語はいくらでもある
最近の言語で例外もパターンマッチもないのはGoくらい
Goはそれもあって同じことする場合でも他言語よりも行数が多くなりがち
それでも型と多重代入があるからシェルスクリプトよりはマシ
>高階関数はevalで関数をよびだすことができるので同等のことは出来る
それがまともに書けるという認識なら何を言っても無駄っぽいね
どうぞシェルスクリプトで頑張ってください
>型がないのは他にも有るだろ
例えば?
>エラーハンドリングも例外がない言語はいくらでもある
最近の言語で例外もパターンマッチもないのはGoくらい
Goはそれもあって同じことする場合でも他言語よりも行数が多くなりがち
それでも型と多重代入があるからシェルスクリプトよりはマシ
>高階関数はevalで関数をよびだすことができるので同等のことは出来る
それがまともに書けるという認識なら何を言っても無駄っぽいね
どうぞシェルスクリプトで頑張ってください
971デフォルトの名無しさん
2020/03/22(日) 17:17:48.98ID:I7uR5y3I >>969
機能がある/ない、できる/できないの2択の話でなくて、規模が大きくなったり構造が複雑になったらそれに適した使いやすい言語を使うと良いというだけの話だろうに。
機能がある/ない、できる/できないの2択の話でなくて、規模が大きくなったり構造が複雑になったらそれに適した使いやすい言語を使うと良いというだけの話だろうに。
972デフォルトの名無しさん
2020/03/22(日) 17:52:07.84ID:9SijoV71 シェルスクリプトの可読性・保守性について問題ないと思ってる人ってシェルスクリプト以外でコード書いてないのだろうとしか思えない
973デフォルトの名無しさん
2020/03/22(日) 18:47:11.03ID:Hw+To0D5 誰もそんなこと言ってないと思うけど
974デフォルトの名無しさん
2020/03/22(日) 22:29:55.52ID:c5TE3idF975デフォルトの名無しさん
2020/03/22(日) 22:31:28.16ID:c5TE3idF976デフォルトの名無しさん
2020/03/22(日) 23:46:42.00ID:I5Su+SV6977デフォルトの名無しさん
2020/03/23(月) 00:00:17.14ID:FfORFm5F >>976
配列とか数値なら、シェルスクリプトにもありますよw
man basnより
declare [-aAfFgilrtux] [-p] [name[=value] ...]
-a 各 name は配列変数です (前述の 配列 を参照)。
-A 各 name は連想配列変数です (前述の 配列 を参照)。
-i 変数を整数として扱います。
配列とか数値なら、シェルスクリプトにもありますよw
man basnより
declare [-aAfFgilrtux] [-p] [name[=value] ...]
-a 各 name は配列変数です (前述の 配列 を参照)。
-A 各 name は連想配列変数です (前述の 配列 を参照)。
-i 変数を整数として扱います。
978デフォルトの名無しさん
2020/03/23(月) 00:28:12.94ID:nPflIkhM basn ってw 落ち着けよw
979デフォルトの名無しさん
2020/03/23(月) 00:30:27.51ID:FfORFm5F どうでもいい指摘はいらんがな
980デフォルトの名無しさん
2020/03/23(月) 01:15:14.84ID:TYte82vJ981デフォルトの名無しさん
2020/03/23(月) 01:16:08.21ID:nPflIkhM 訂正しとけよw
982デフォルトの名無しさん
2020/03/23(月) 10:39:17.98ID:iyDg9ARV >>977
>配列とか数値なら、シェルスクリプトにもありますよw
型がどういうものか何も知らないんだな
マジでもう少し勉強したほうがいいよ
結局シェルスクリプトしかできなくて他の言語使えと言われると困るから
「シェルスクリプトでもできるもん」て必死に言い訳してるだけ
VBAしかできないVBAerと同じで完全に老害だぞ
>配列とか数値なら、シェルスクリプトにもありますよw
型がどういうものか何も知らないんだな
マジでもう少し勉強したほうがいいよ
結局シェルスクリプトしかできなくて他の言語使えと言われると困るから
「シェルスクリプトでもできるもん」て必死に言い訳してるだけ
VBAしかできないVBAerと同じで完全に老害だぞ
983デフォルトの名無しさん
2020/03/23(月) 10:58:57.53ID:pXU5nyzo あくまで「効率的に」できるかどうかの話をしているはずなのになぜか言語仕様上できるかで語るからおかしなことになる
984デフォルトの名無しさん
2020/03/23(月) 12:00:16.76ID:nemSJghh 「(俺はシェルスクリプトしか書けないから)シェルスクリプトで書くのがもっとも効率的だ」
985デフォルトの名無しさん
2020/03/23(月) 12:53:13.68ID:SU+/TFOc >>982
ある言語に型がある、って、どういう挙動をしたらそう言えるの?
Bashでは事実「これは整数だよ」と(少なくともプログラマに対して)そう言えるんだけど、それじゃだめなの?
逆にPythonは変数宣言する時に型を明示しなくてもいいけど
一般に「型を持つ」って言われるよね。
ある言語に型がある、って、どういう挙動をしたらそう言えるの?
Bashでは事実「これは整数だよ」と(少なくともプログラマに対して)そう言えるんだけど、それじゃだめなの?
逆にPythonは変数宣言する時に型を明示しなくてもいいけど
一般に「型を持つ」って言われるよね。
986デフォルトの名無しさん
2020/03/23(月) 13:15:59.08ID:cSlylFOX それはちょっと違うな
双方とも、話が噛み合ってなさすぎ
双方とも、話が噛み合ってなさすぎ
987デフォルトの名無しさん
2020/03/23(月) 13:17:16.43ID:xNveXtQI 比較検討の対象範囲が狭い人が堕ちる地獄だね
傍から見ると、視認可能な穴に自ら飛び込んでいるように映る
傍から見ると、視認可能な穴に自ら飛び込んでいるように映る
988デフォルトの名無しさん
2020/03/23(月) 13:55:21.04ID:1yvBsEB/989デフォルトの名無しさん
2020/03/23(月) 13:56:23.56ID:1yvBsEB/990デフォルトの名無しさん
2020/03/23(月) 14:38:42.12ID:OwPrjqjt991デフォルトの名無しさん
2020/03/23(月) 14:41:24.44ID:cOy+SXou992デフォルトの名無しさん
2020/03/23(月) 16:50:24.71ID:OwPrjqjt >>991
仲裁に入っただけの俺にそんな返しされても困る
仲裁に入っただけの俺にそんな返しされても困る
993デフォルトの名無しさん
2020/03/23(月) 17:22:17.80ID:gNyotYW5 >>982
予め断っておくが,
俺自身は「シェルスクリプトは万能」だなんて思ってない。
でも,プログラミング言語においてどういうものを「型」といって
どういうものを「型」と言わないのかを知りたい。
少なくともBashのdeclare組み込みコマンドには型機能が備わってるように見えるんだけど……
https://www.gnu.org/software/bash/manual/html_node/Bash-Builtins.html#index-declare
例えば「整数」として取り扱う場合には算術演算が記述できる,空だけど配列変数として指定できる,
みたいな機能って,「型」って言わないの?
予め断っておくが,
俺自身は「シェルスクリプトは万能」だなんて思ってない。
でも,プログラミング言語においてどういうものを「型」といって
どういうものを「型」と言わないのかを知りたい。
少なくともBashのdeclare組み込みコマンドには型機能が備わってるように見えるんだけど……
https://www.gnu.org/software/bash/manual/html_node/Bash-Builtins.html#index-declare
例えば「整数」として取り扱う場合には算術演算が記述できる,空だけど配列変数として指定できる,
みたいな機能って,「型」って言わないの?
994デフォルトの名無しさん
2020/03/24(火) 01:28:15.59ID:dWYBHKWQ995デフォルトの名無しさん
2020/03/24(火) 22:04:54.75ID:/ZNMWK8v シェルスクリプトで完結することはシェルスクリプトでやったほうがいいと思うわ。
プログラミング言語みたいにいちいち環境を構築しなくていいからね。
プログラミング言語みたいにいちいち環境を構築しなくていいからね。
996デフォルトの名無しさん
2020/03/25(水) 08:34:13.83ID:OJUUwfHr997デフォルトの名無しさん
2020/03/25(水) 09:05:46.32ID:CcGCNzeN >>995
人によって"シェルスクリプトで完結する"感覚が違うのが問題の始まり
人によって"シェルスクリプトで完結する"感覚が違うのが問題の始まり
998デフォルトの名無しさん
2020/03/25(水) 09:59:10.25ID:C+CVbv8A >>997
シェルスクリプトでコードが大きくなったら別言語でやる
というのは、単にシェルスクリプトをちゃんと勉強してないからだと思う
もともとシェルスクリプトでは実装が難しい問題であれば
最初からシェルスクリプトは使わない。例えばバイナリファイルとして
特定の位置のデータを読み書きするとか
でも最初にシェルスクリプトでやろうと思った時は、
シェルスクリプトでやるのが適した問題だったのだろう。
その後、やっぱり他の言語で〜って言い出す時は、
シェルスクリプトで作る能力がないことの言い訳だと思う
シェルスクリプトでコードが大きくなったら別言語でやる
というのは、単にシェルスクリプトをちゃんと勉強してないからだと思う
もともとシェルスクリプトでは実装が難しい問題であれば
最初からシェルスクリプトは使わない。例えばバイナリファイルとして
特定の位置のデータを読み書きするとか
でも最初にシェルスクリプトでやろうと思った時は、
シェルスクリプトでやるのが適した問題だったのだろう。
その後、やっぱり他の言語で〜って言い出す時は、
シェルスクリプトで作る能力がないことの言い訳だと思う
999デフォルトの名無しさん
2020/03/25(水) 10:11:05.97ID:Y57VqPvD 読めてないのに参加するなよ
1000デフォルトの名無しさん
2020/03/25(水) 10:25:14.61ID:C+CVbv8A >>999
おまえには理解できんだけさ
おまえには理解できんだけさ
10011001
Over 1000Thread このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 152日 10時間 16分 29秒
新しいスレッドを立ててください。
life time: 152日 10時間 16分 29秒
レス数が1000を超えています。これ以上書き込みはできません。
ニュース
- 【国際法を無視】日本での「中華人民共和国に台湾問題を論じる資格なし」との声に 中国外交部が厳しく反論… ★2 [BFU★]
- 【工作員】「X」のアカウント所在地公開機能が暴いた世論操作の実態 MAGA支持著名アカウントの多くが米国外から運営 日本にも波及 ★3 [ごまカンパチ★]
- 生クリームだけの真っ白なクリスマスケーキ 大手メーカーが販売、その理由は…フルーツなしで価格は半額以下に ★3 [おっさん友の会★]
- 【文春】元TOKIO・国分太一(51)「女性スタッフ2名への“わいせつ事案”」日テレ事情聴取の全貌が分かった! ★5 [Ailuropoda melanoleuca★]
- 首相答弁「スパイ防止法、外国代理人登録法、ロビー活動公開法などについて速やかに法案を策定する」 [1ゲットロボ★]
- 【テレビ】浜田敬子氏 高市首相発言『50%が問題なし』の世論調査に危機感… 「みんな分かってるのかな?と思う」 [冬月記者★]
- まったりまったりおじゃる丸待機スレ🏡
- 中国外務省「全く不十分だ。ごまかすような手口を使うべきではない」高市答弁を批判 [834922174]
- JKに太もも出さしてやりましたよWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
- 【悲報】このままだと2040年に日本崩壊… たしかに高市事変やコメ高騰にかまけてインフラ老朽化問題を放置しているもんな [452836546]
- 香港マンションやばくね?1000人くらい死んでそう [546716239]
- ヤンジャン新人漫画大賞、入賞作品のAI絵疑惑で大荒れ😄😄😄 高市早苗要素あり [175344491]
