■ このスレッドは過去ログ倉庫に格納されています
シェルスクリプト総合 その32
- 1 :デフォルトの名無しさん:2019/10/25(金) 00:08:45.53 ID:6btPTvif.net
- シェルスクリプトに関する総合スレッドです。
全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。
・「○○(他の言語)でいいやん」は禁止。他のスレに行ってください。
シェルスクリプト総合 その31
https://mevius.5ch.net/test/read.cgi/tech/1565446670/
- 952 :デフォルトの名無しさん:2020/03/21(土) 21:07:17.99 ID:9LT6s2kW.net
- # 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* ]
などとまったく同じなのに、[ ] が何か特別(スクリプト構文?)とでも思ってしまう割と最近始めましたな人用かと思ってしまうな
- 953 :デフォルトの名無しさん:2020/03/21(土) 22:20:10 ID:ys6caT0H.net
- >>947
引数は""で囲むのは常識。shellcheckでも指摘される。
- 954 :デフォルトの名無しさん:2020/03/22(日) 00:45:59.87 ID:7aOor4nW.net
- >>951
100行以上って理由がわからんよね
どんな言語だって1つの関数が100行超えるようならやめるべきだし
超えるなら別関数(別コマンド)にすればいいのはシェルスクリプトでも同じ
- 955 :デフォルトの名無しさん:2020/03/22(日) 05:06:02.12 ID:5UlsRo7e.net
- >どんな言語だって1つの関数が100行超えるようならやめるべきだし
これもよくわからんけどなあ
最初に一回だーっと降りてくるだけの処理を
こまこまこまこま関数に分けたがる奴はなんなん?と思う
シェルスクリプトなんか大体そういう処理だけだろ?
- 956 :デフォルトの名無しさん:2020/03/22(日) 05:49:25.01 ID:7aOor4nW.net
- >>955
え?シェルスクリプトで外部コマンド使わんの?
最初に一回だーっと降りてくるだけの処理でも
その中の一部を外部コマンドとか関数にするでしょ?
再利用するとか、そこだけ実行できるようにするために。
- 957 :デフォルトの名無しさん:2020/03/22(日) 05:55:46.13 ID:7aOor4nW.net
- あと「関数や処理が長くなったら分けるよね」という
技術的な話に対して「分ける」or「分けない」とは無関係な
「俺はシェルスクリプトで長い処理は作らない」という
個人的な話をごちゃまぜにしないでくれ
「分けるよね?」の答えにはなってないから。
- 958 :デフォルトの名無しさん:2020/03/22(日) 07:35:58.24 ID:5UlsRo7e.net
- >>956
引用部分をちゃんと読んでくれよ
あんたが書いた文だぞ?
>>957
>「分けるよね?」の答えにはなってないから。
長さじゃ分けない。
- 959 :デフォルトの名無しさん:2020/03/22(日) 07:52:15.98 ID:7aOor4nW.net
- >>958
じゃあ何で分けるのさ?
- 960 :デフォルトの名無しさん:2020/03/22(日) 09:08:29 ID:c5TE3idF.net
- >どんな言語だって1つの関数が100行超えるようならやめるべきだし
を何度読んでも、そのとおりとしか?
- 961 :デフォルトの名無しさん:2020/03/22(日) 10:24:47 ID:I5Su+SV6.net
- 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.
関数の長さじゃなくスクリプトの長さの話
似てるけど持ってる意味合いが違う
- 962 :デフォルトの名無しさん:2020/03/22(日) 12:56:41.04 ID:tFupwLj7.net
- シェルスクリプトも十分構造化されてると思うんだけどねぇ。
まあ,Pythonとかに比べれば,メッソドや継承とかそういう概念が備わってない意味では低級だけど,
「シェルスクリプトで巨大なプログラムを書くべきでない理由」として
「シェルスクリプトは*構造的*でないから」ってのはちょっと頂けない。
シェルスクリプトには構造化プログラミングを支援する機能(函数定義,局所変数)が備わってる以上,
構造化されてないシェルスクリプトがあったならそれは書いた人間の責任であって,
もっと言うとそういうシェルスクリプトを書くような人間は,
Pythonであっても,用意されたオブジェクト指向の機能なんて使わずに,ひたすら手続き的なプログラムを書くだろう。
- 963 :デフォルトの名無しさん:2020/03/22(日) 13:04:15.24 ID:c5TE3idF.net
- >>962
そういうことだよね。
シェルスクリプトで書いたそのコードを
他の言語で書いたところで、ロジックが同じなら行数も同じ
- 964 :デフォルトの名無しさん:2020/03/22(日) 14:10:38.21 ID:An20OwGu.net
- >>952
懇切丁寧な解説が初心者向けじゃないなら何なのさ
常識しか載ってなくてつまらなかった?
- 965 :デフォルトの名無しさん:2020/03/22(日) 14:27:24.29 ID:Hw+To0D5.net
- 何を絡んでいるんだか
- 966 :デフォルトの名無しさん:2020/03/22(日) 14:32:07.41 ID:Hw+To0D5.net
- 結論、初心者も視野に大いに入っている規約。ある意味初心者に合わせた
だから、100行についてあれこれ議論してもしょうがないよ、Googleにコード提供するわけでもなし変だと思うならふーんと無視だなw
- 967 :デフォルトの名無しさん:2020/03/22(日) 15:21:02.01 ID:I5Su+SV6.net
- >>962
同じロジックでも行数は全然違ってくるよ
shやbashには型がないのと原始的エラーハンドリング機構しかないのが大きい
他にも高階関数がまともに書けないし
一般的な言語に用意されてる便利メソッドもないし
モジュール化機能も関数とファイル以外に無い
読みやすさ、メンテしやすさ、テストのしやすさの点から
シェルスクリプトの限界を認識して節度を持って使おうねってのが
Googleのガイドの意図だと思う
- 968 :デフォルトの名無しさん:2020/03/22(日) 15:21:37.48 ID:I5Su+SV6.net
- >>967
アンカ間違えた
- 969 :デフォルトの名無しさん:2020/03/22(日) 15:48:56 ID:c5TE3idF.net
- >>967
型がないのは他にも有るだろ
エラーハンドリングも例外がない言語はいくらでもある
高階関数はevalで関数をよびだすことができるので同等のことは出来る
メソッドはオブジェクト指向じゃないから関数として
外部コマンド=シェルスクリプトの関数なんだからたくさんある
モジュール化機能って関数とファイル以外に何が必要なんだ?
> シェルスクリプトの限界を認識して
その限界の理由がはっきり書かれてない。
読みやすさが悪い、メンテしやすさが悪い、テストのしやすさが悪い
という"結論"を言ってるが理由がない
- 970 :デフォルトの名無しさん:2020/03/22(日) 16:56:26.48 ID:I5Su+SV6.net
- >>969
>型がないのは他にも有るだろ
例えば?
>エラーハンドリングも例外がない言語はいくらでもある
最近の言語で例外もパターンマッチもないのはGoくらい
Goはそれもあって同じことする場合でも他言語よりも行数が多くなりがち
それでも型と多重代入があるからシェルスクリプトよりはマシ
>高階関数はevalで関数をよびだすことができるので同等のことは出来る
それがまともに書けるという認識なら何を言っても無駄っぽいね
どうぞシェルスクリプトで頑張ってください
- 971 :デフォルトの名無しさん:2020/03/22(日) 17:17:48.98 ID:I7uR5y3I.net
- >>969
機能がある/ない、できる/できないの2択の話でなくて、規模が大きくなったり構造が複雑になったらそれに適した使いやすい言語を使うと良いというだけの話だろうに。
- 972 :デフォルトの名無しさん:2020/03/22(日) 17:52:07 ID:9SijoV71.net
- シェルスクリプトの可読性・保守性について問題ないと思ってる人ってシェルスクリプト以外でコード書いてないのだろうとしか思えない
- 973 :デフォルトの名無しさん:2020/03/22(日) 18:47:11.03 ID:Hw+To0D5.net
- 誰もそんなこと言ってないと思うけど
- 974 :デフォルトの名無しさん:2020/03/22(日) 22:29:55.52 ID:c5TE3idF.net
- >>970
> 例えば?
Perl
> 最近の言語で
いきなり言い訳から入るスタンスかw C言語もないですよね
> それがまともに書けるという認識なら
反論できてないじゃんw
>>971
そこに行数は関係ないよね。やってることが同じなら他の言語に変えても同じこと
- 975 :デフォルトの名無しさん:2020/03/22(日) 22:31:28.16 ID:c5TE3idF.net
- >>972
言語で何かが標準サポートされないと
可読性や保守性を保てないんでしょ?
可読性や保守性なんて言語関係ないのに
自分に能力がない理由を言語のせいにするな
- 976 :デフォルトの名無しさん:2020/03/22(日) 23:46:42 ID:I5Su+SV6.net
- >>974
>Perl
Perlには型あるよ
型の有無も分からないレベルなら比較しても意味ないから
もう少しプログラミング言語を勉強してから出直してくれ
- 977 :デフォルトの名無しさん:2020/03/23(月) 00:00:17.14 ID:FfORFm5F.net
- >>976
配列とか数値なら、シェルスクリプトにもありますよw
man basnより
declare [-aAfFgilrtux] [-p] [name[=value] ...]
-a 各 name は配列変数です (前述の 配列 を参照)。
-A 各 name は連想配列変数です (前述の 配列 を参照)。
-i 変数を整数として扱います。
- 978 :デフォルトの名無しさん:2020/03/23(月) 00:28:12.94 ID:nPflIkhM.net
- basn ってw 落ち着けよw
- 979 :デフォルトの名無しさん:2020/03/23(月) 00:30:27.51 ID:FfORFm5F.net
- どうでもいい指摘はいらんがな
- 980 :デフォルトの名無しさん:2020/03/23(月) 01:15:14 ID:TYte82vJ.net
- 次スレ
シェルスクリプト総合 その33
https://mevius.5ch.net/test/read.cgi/tech/1584893550/
- 981 :デフォルトの名無しさん:2020/03/23(月) 01:16:08 ID:nPflIkhM.net
- 訂正しとけよw
- 982 :デフォルトの名無しさん:2020/03/23(月) 10:39:17.98 ID:iyDg9ARV.net
- >>977
>配列とか数値なら、シェルスクリプトにもありますよw
型がどういうものか何も知らないんだな
マジでもう少し勉強したほうがいいよ
結局シェルスクリプトしかできなくて他の言語使えと言われると困るから
「シェルスクリプトでもできるもん」て必死に言い訳してるだけ
VBAしかできないVBAerと同じで完全に老害だぞ
- 983 :デフォルトの名無しさん:2020/03/23(月) 10:58:57.53 ID:pXU5nyzo.net
- あくまで「効率的に」できるかどうかの話をしているはずなのになぜか言語仕様上できるかで語るからおかしなことになる
- 984 :デフォルトの名無しさん:2020/03/23(月) 12:00:16.76 ID:nemSJghh.net
- 「(俺はシェルスクリプトしか書けないから)シェルスクリプトで書くのがもっとも効率的だ」
- 985 :デフォルトの名無しさん:2020/03/23(月) 12:53:13.68 ID:SU+/TFOc.net
- >>982
ある言語に型がある、って、どういう挙動をしたらそう言えるの?
Bashでは事実「これは整数だよ」と(少なくともプログラマに対して)そう言えるんだけど、それじゃだめなの?
逆にPythonは変数宣言する時に型を明示しなくてもいいけど
一般に「型を持つ」って言われるよね。
- 986 :デフォルトの名無しさん:2020/03/23(月) 13:15:59.08 ID:cSlylFOX.net
- それはちょっと違うな
双方とも、話が噛み合ってなさすぎ
- 987 :デフォルトの名無しさん:2020/03/23(月) 13:17:16.43 ID:xNveXtQI.net
- 比較検討の対象範囲が狭い人が堕ちる地獄だね
傍から見ると、視認可能な穴に自ら飛び込んでいるように映る
- 988 :デフォルトの名無しさん:2020/03/23(月) 13:55:21 ID:1yvBsEB/.net
- >>982
声が震えてるぞw
知らないんだな(くっ何も言い返せない)
捨て台詞かよwww
自称知ってるお前さん、ちゃんと説明してみぃ?
- 989 :デフォルトの名無しさん:2020/03/23(月) 13:56:23 ID:1yvBsEB/.net
- >>983
効率的に出来なかったら何がだめなのか?
今の話に「効率」がどう関係するのか?
説明は?
- 990 :デフォルトの名無しさん:2020/03/23(月) 14:38:42 ID:OwPrjqjt.net
- >>932
> 型がどういうものか何も知らないんだな
> マジでもう少し勉強したほうがいいよ
説明なしに相手をディスるだけのレスはやめとけ
マウント取れないし、捨て台詞的で負けを認めたと取られかねない
仮にマウント取れても所詮匿名の掲示板なんで dat 落ちすればそれまで
>>989
> 今の話に「効率」がどう関係するのか?
話の発端は「もっと構造化された言語で書き直すべき」でしょ?
揚げ足取りするなとは言わんが本題を忘れるほど熱中すんな
- 991 :デフォルトの名無しさん:2020/03/23(月) 14:41:24.44 ID:cOy+SXou.net
- >>990
シェルスクリプトが得意な分野
(コマンドの組み合わせで行う処理)は
シェルスクリプトが一番効率がいいんですよ。
他の言語で同じことを書いたら行数が増えます。
例えばsed
- 992 :デフォルトの名無しさん:2020/03/23(月) 16:50:24.71 ID:OwPrjqjt.net
- >>991
仲裁に入っただけの俺にそんな返しされても困る
- 993 :デフォルトの名無しさん:2020/03/23(月) 17:22:17 ID:gNyotYW5.net
- >>982
予め断っておくが,
俺自身は「シェルスクリプトは万能」だなんて思ってない。
でも,プログラミング言語においてどういうものを「型」といって
どういうものを「型」と言わないのかを知りたい。
少なくともBashのdeclare組み込みコマンドには型機能が備わってるように見えるんだけど……
https://www.gnu.org/software/bash/manual/html_node/Bash-Builtins.html#index-declare
例えば「整数」として取り扱う場合には算術演算が記述できる,空だけど配列変数として指定できる,
みたいな機能って,「型」って言わないの?
- 994 :デフォルトの名無しさん:2020/03/24(火) 01:28:15.59 ID:dWYBHKWQ.net
- >>947
それ、スペースの入り方によってはうまくいかんよね。
やっぱ普通にダブルクォーテーションで括った方が良いのでは?
- 995 :デフォルトの名無しさん:2020/03/24(火) 22:04:54 ID:/ZNMWK8v.net
- シェルスクリプトで完結することはシェルスクリプトでやったほうがいいと思うわ。
プログラミング言語みたいにいちいち環境を構築しなくていいからね。
- 996 :デフォルトの名無しさん:2020/03/25(水) 08:34:13 ID:OJUUwfHr.net
- >>991
sed楽だなー
改行も当然消せるよな、あれ、なんか面倒くせーぞ
そういう時はtr使うのか、なーんだよ
みたいな事がよくある
- 997 :デフォルトの名無しさん:2020/03/25(水) 09:05:46.32 ID:CcGCNzeN.net
- >>995
人によって"シェルスクリプトで完結する"感覚が違うのが問題の始まり
- 998 :デフォルトの名無しさん:2020/03/25(水) 09:59:10 ID:C+CVbv8A.net
- >>997
シェルスクリプトでコードが大きくなったら別言語でやる
というのは、単にシェルスクリプトをちゃんと勉強してないからだと思う
もともとシェルスクリプトでは実装が難しい問題であれば
最初からシェルスクリプトは使わない。例えばバイナリファイルとして
特定の位置のデータを読み書きするとか
でも最初にシェルスクリプトでやろうと思った時は、
シェルスクリプトでやるのが適した問題だったのだろう。
その後、やっぱり他の言語で〜って言い出す時は、
シェルスクリプトで作る能力がないことの言い訳だと思う
- 999 :デフォルトの名無しさん:2020/03/25(水) 10:11:05.97 ID:Y57VqPvD.net
- 読めてないのに参加するなよ
- 1000 :デフォルトの名無しさん:2020/03/25(水) 10:25:14 ID:C+CVbv8A.net
- >>999
おまえには理解できんだけさ
- 1001 :2ch.net投稿限界:Over 1000 Thread
- 2ch.netからのレス数が1000に到達しました。
総レス数 1001
290 KB
掲示板に戻る
全部
前100
次100
最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★