[過去ログ] シェルスクリプト総合 その29 (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
1(1): 2018/09/21(金)23:34 ID:/eJt2TVD(1/5) AAS
シェルスクリプトに関する総合スレッドです。
全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。
前スレ:
シェルスクリプト総合 その28
2chスレ:tech
876: 2019/06/30(日)09:29 ID:sdmPaDuU(1) AAS
シェルスクリプトで可搬性のあるコードを書くのはそもそも無理がある
877(1): 2019/06/30(日)10:28 ID:2juPiYlp(1/2) AAS
>>846
だよな。どこでも動くシェルスクリプトなんて都市伝説だし。
878(1): 2019/06/30(日)10:43 ID:Fo3wYRY8(1/6) AAS
>>846
> echo の引数で -n が使えるか使えないかなんて考えるのやめて10年以上経つわ。
すべてのPOSIX準拠シェルで-nは使える
>>877
POSIX準拠シェルであれば可能。不可能な理由がない。
879(1): 2019/06/30(日)16:52 ID:rfDMTcnr(2/13) AAS
>>875,878
なんでスクリプトの構文のみの話になってるの? 可搬性の話がずれてる。
autoconf が作る configure のような、メンテナンス性・可読性皆無だが比較的どこでも動くスクリプトみたいな奴
だと思ってるんだが皆はどういう認識なのよ?
880: 2019/06/30(日)17:13 ID:DWafJWcS(1) AAS
シェルの仕様だけの問題じゃなくて、コマンドがOS、バージョンによってまちまち
IPアドレス取得するだけでも大量にバリエーションがあってどうにもならないから、Linuxではifconfigが非推奨になった
881(1): 2019/06/30(日)18:00 ID:Fo3wYRY8(2/6) AAS
コマンドもPOSIX準拠のものだけ使うに決まってるじゃん
はい、可搬性ありまーす
rubyでsedを呼び出していて、非POSIXのオプション使ってるから
rubyは可搬性がないとか言われても困るw
この場合可搬性がないのはsed(の非POSIXのオプション)であって
呼び出してる言語(ruby or shell)が可搬性がないわけではない
882(1): 2019/06/30(日)18:38 ID:29vlF+26(2/4) AAS
>>879
「autoconfが作るconfigure」は「どこでも動くスクリプト」じゃないだろ
そのシステム専用のスクリプトだよ
883(1): 2019/06/30(日)18:47 ID:Fo3wYRY8(3/6) AAS
はぁ、なんでこんなに頭が悪いんだろう。
「C言語が吐き出すアセンブリ言語」は「どこでも動くアセンブリ言語」じゃないから
C言語は可搬性がないという主張ですかね。
ほんと、頭わりぃ
884: 2019/06/30(日)19:12 ID:wmvzG4iV(2/9) AAS
「POSIXクソだりー可搬性なんていらん」とかいうやつはshellcheckとかリンター使えよ
885: 2019/06/30(日)19:29 ID:/aVhErQn(1) AAS
>>869
外部リンク:output.jsbin.com
Draw.io (外部リンク:www.draw.io ドキュメント
外部リンク:pastebin.com
間違ってるとこもあるだろうが、あとは自分で
886(1): 2019/06/30(日)20:26 ID:1ALBmyOB(2/2) AAS
>>881
それな。
「シェルスクリプトは可搬性がない!」なんて言ってる奴が単に可搬性のある書き方を知らないだけだと思う。
もちろんPOSIXに準拠するかしないかは個人の自由だけど
そんなことも知らずにPOSIX規格に記載のない書き方をしておいて「可搬性がない」は失笑モノだわ。
887: 2019/06/30(日)21:48 ID:2juPiYlp(2/2) AAS
他で動かないように書けてしまうのが問題。
POSIX範囲外の余計な機能を付けるからだ。
すべて削除してPOSIX以外書けないひとつのshにするべし。
888: 2019/06/30(日)22:03 ID:pDzbN/vc(1) AAS
AA省
889(1): 2019/06/30(日)22:10 ID:XM+o4kuM(1) AAS
posix linker 作ったら需要ありそうだな?
890: 2019/06/30(日)22:37 ID:29vlF+26(3/4) AAS
>>883
おまえ、自分で書いた文章読んでみろよ
「autoconfが作るconfigure」がどこでも動くのかよ
891(1): 2019/06/30(日)22:40 ID:rfDMTcnr(3/13) AAS
>>886
結局複数環境で動かすには何が必要かは置かれた環境でまちまちなわけで。
grep や awk が POSIX 対応していない環境だってあるわけで、そういう人からすると
POSIX 準拠してればいいって言ってる人は論外なわけなんだわ。
892(1): 2019/06/30(日)22:44 ID:rfDMTcnr(4/13) AAS
>>882
流石に「そのシステム専用」は失礼過ぎないか?
FreeBSD でも Linux でも AIX でも Solaris でも大概な UNIX ライクなシステムで動くし、それらの環境を持ってない
開発者が作ったプログラムを安全にサポートしてくれてるでしょ?
それとも autoconf とか automake とか使ったことない人かな? なら黙っててよ。
893(1): 2019/06/30(日)22:50 ID:wmvzG4iV(3/9) AAS
>>891
今どきPOSIX非準拠のシステムなんてないだろ
nextstepがーとか言い出すなよw
894(2): 2019/06/30(日)22:56 ID:rfDMTcnr(5/13) AAS
>>893
準拠してるっていっても非準拠の時代に対して互換性を確保する必要があるから PATH を通す順番
変えるとかでシステムごとに if 文地獄。
ここまでちゃんとやって可搬性があるって胸張れるってもんでしょ。
895(2): 2019/06/30(日)22:59 ID:Fo3wYRY8(4/6) AAS
>>894
お前さ、もしかして、autoconfが生成したconfigureを
他の環境にコピーして動くかどうかって話をしてるの?
Yes か No で答えて
896(1): 2019/06/30(日)23:03 ID:29vlF+26(4/4) AAS
>>892
そのシステムに合わせたスクリプトを出力するのがautoconfなのに
何を言ってるんだ君は??
897(1): 2019/06/30(日)23:06 ID:wmvzG4iV(4/9) AAS
>>894
そこまでちゃんとやってるから準拠システムとして認定されてるんだろ
バカなの?
898(1): 2019/06/30(日)23:12 ID:rfDMTcnr(6/13) AAS
>>895,896
当然 Yes ですよ?
そのシステムだけで動くものなら最初から Makefile だけつくってりゃいいって話になる。
ちゃんと書けてない、エラーメッセージろくによんでないからそうなるだけだろ?
899(1): 2019/06/30(日)23:15 ID:rfDMTcnr(7/13) AAS
>>897
現実のシステム触ってなくて自信なくなったからディスるって、もう見てられないです。
900(1): 2019/06/30(日)23:15 ID:Fo3wYRY8(5/6) AAS
>>898
ばかやなー。configureは環境毎に生成するものなんだから
可搬性が有るかどうかを考える必要がない問題
コピーしないものをコピーしても動くようにするには
どうするかなんて、考える意味がないことだろ
今話してるのは「シェルスクリプトで可搬性のあるコードを書く」という
書かないものについて、話をしても意味はない。
901(1): 2019/06/30(日)23:21 ID:wmvzG4iV(5/9) AAS
>>899
> 互換性を確保する必要があるから PATH を通す順番
変える
は?君は何を言っているんだ?
902(1): 2019/06/30(日)23:23 ID:rfDMTcnr(8/13) AAS
>>900
configure が環境ごとの Makefile や config.h を生成するのであって、configure は環境ごとに生成するものではないぞ?
環境ごとに生成するならなぜ Unix Like 向けのオープンソースは configure を配るわけ?
その理屈なら configure.ac だけで良いんじゃないの?
INSTALL に autoconf 先に実行してくださいって書いてないのはなんで?
903(1): 2019/06/30(日)23:24 ID:rfDMTcnr(9/13) AAS
>>901
/usr/bin に入っているのは POSIX 非互換で、他のパスに POSIX 互換コマンドつっこんで POSIX 互換ですって
言ってる環境がゴロゴロあって難儀してるって話だが?
904(1): 2019/06/30(日)23:27 ID:wmvzG4iV(6/9) AAS
>>903
具体的にそのシステムを言ってみ?
905(1): 2019/06/30(日)23:33 ID:rfDMTcnr(10/13) AAS
>>904
Solaris AIX HPUX とかそうじゃん。
906(1): 2019/06/30(日)23:36 ID:wmvzG4iV(7/9) AAS
>>905
で、POSIX 互換コマンドがどこにつっこんであるって?
907(2): 2019/06/30(日)23:39 ID:rfDMTcnr(11/13) AAS
>>906
/usr/bin じゃないところ。
908(1): 2019/06/30(日)23:42 ID:wmvzG4iV(8/9) AAS
>>907
うちのHPUXは/bin, /usr/bin にちゃんとリンク張ってあるけどな
それなんてHPUX?
909(1): 2019/06/30(日)23:44 ID:Fo3wYRY8(6/6) AAS
>>902
> 環境ごとに生成するならなぜ Unix Like 向けのオープンソースは configure を配るわけ?
configure を配ってるタイプなら、
そのconfigure には可搬性が有るということだろw
910: 2019/06/30(日)23:48 ID:rfDMTcnr(12/13) AAS
>>909
で、 >>895 の質問はどうするのよ?
911: 2019/06/30(日)23:49 ID:rfDMTcnr(13/13) AAS
>>908
何の話? POSIX 非互換の話をしているんだが?
912: 2019/06/30(日)23:49 ID:wmvzG4iV(9/9) AAS
>>907
それ本当ならPOSIX準拠じゃないじゃん
嘘ついちゃダメよw
913: 2019/07/01(月)00:10 ID:ASzHSATG(1) AAS
>>889
何をリンクするんだ?
914: 2019/07/01(月)01:28 ID:2smzn43h(1/8) AAS
結局POSIX規格に準じてないコマンドの具体例一つも出せてなくて草生えますよ
「現行で使われているPOSIX準拠を謳っている筈のXXX-OSでは
/bin/xxxにあるコマンドXXXがPOSIX規格とこれこれこういう点で不一致」
↑これを言えばいいだけだぜ? それを言うのに何レスを無駄な喧嘩で消費してるんだ。
915: 2019/07/01(月)01:36 ID:4+biahsm(1/5) AAS
と、後出し先輩がドヤっておりますw
916: 2019/07/01(月)02:49 ID:2smzn43h(2/8) AAS
あ、後出し?
917(2): 2019/07/01(月)04:01 ID:TT0ZFmIC(1/2) AAS
オプションの-と--の扱いが雑なコマンドはどうなの
findは-の後が単語だし(-name)
wgetも-の後に2文字指定したりするし( -nc)
tarは-が不要な上に-の有無で挙動が変わるpsまであるし
基本コマンドの時点で既にガバガバじゃねーか
ddはそもそも出身が違うしな
918(1): 2019/07/01(月)04:33 ID:TlV+Kbgz(1/2) AAS
なにか困りますか?そういうオプションで
ターミナル上で普通にコマンド打ってますよ。
あなた黒い画面(CLI)で仕事できない人ですか?
919(2): 2019/07/01(月)07:34 ID:KK3BgYtY(1/3) AAS
>>918
なにか困りますって、別のシステムにスクリプト持って行った時に正常動作しないから困ります、でしょ。
920: 2019/07/01(月)07:54 ID:2smzn43h(3/8) AAS
>>917
POSIXでは--から始まるオプションや複数文字のオプションは認められてない。
そこコマンドが勝手独自に拡張しているものを持って来て「互換性がない!」っていうのはおかしい。
921: 2019/07/01(月)09:00 ID:TlV+Kbgz(2/2) AAS
>>919
お前言ってることめちゃくちゃだな
コマンドによってオプションの形式が違ってるって話を
お前はしていただろ
別のシステムに持っていったって、あるコマンドの
オプションの形式は同じなんだから正常に動くだろ
922(1): 2019/07/01(月)11:01 ID:AbRjjU8q(1) AAS
date コマンドの オプション、
GNU版 と他の (BSD系 Mac とか) で全然違ってて戸惑った事がある
923(1): 2019/07/01(月)11:29 ID:4+biahsm(2/5) AAS
POSIXは実装ありきの後出し規格なんだよ
カバーしきれない部分がたくさんある
917の挙げてる中で wget tar はPOSIXコマンドじゃない
特にネットワーク系コマンドはほとんど規格化されていない
POSIXから外れた部分の可搬性を高めるにはどうする?
例えばネットから何か落とそうと思ったら wgetかcurl使うじゃん
でも全てのシステムに必ず入ってるわけじゃない
無いならインストールしてくださいってなるわな
バージョン上がると独自拡張されたり仕様変わったりで対応いるだろ
POSIXみたいに下位互換性も保証されない
可搬性ってやつはどうなるんだ?
924(1): 2019/07/01(月)12:13 ID:ywGyCn2/(1/7) AAS
>>922
そのためのPOSIX
>>923
DirectXはWindows環境でしか使えないから
C++は可搬性がないってか?
シェルスクリプトの可搬性の話をしてる。
外部コマンドはシェルスクリプトの範疇外だろ
925(1): 2019/07/01(月)12:31 ID:4+biahsm(3/5) AAS
>>924
それ比喩になってないんだけどw
言ってること分からないならレスしなくていいよ
926(2): 2019/07/01(月)12:34 ID:ywGyCn2/(2/7) AAS
>>925
比喩になってるよ。
理由は書かなくていいよね
理由書かずに比喩になってないと主張する人みたいだから
927: 2019/07/01(月)12:47 ID:RLVJ6D4b(1) AAS
>>926
説明できない奴に限ってこういうこと言い出すんだよな
適当に書きましたごめんなさいってなんで言えないんだろう
宮迫だって金もらってましたごめんなさいって最初に言ってれば
秋には復帰できてたろうになあ(まあ復帰しなくても構いませんが)
928(1): 2019/07/01(月)14:20 ID:TT0ZFmIC(2/2) AAS
Macの(BSD版)sed での上書き保存 - Qiita
外部リンク:qiita.com
BSD sed のラベルの後ろではコマンド区切りのセミコロンが使えない - Qiita
外部リンク:qiita.com
優等生なはずのBSDの方が不便に思えるけど
929: 2019/07/01(月)16:02 ID:0UaOtlQU(1/15) AAS
優等生ってなにをもってなのかわからんが、BSDのコマンドよりもGNUの方があれやこれやオプションが充実してたりする。POSIXの方がもっと不便だぞw
開発者の数が全然違うんだろうからしょうがないんだろう
930: 2019/07/01(月)16:09 ID:0UaOtlQU(2/15) AAS
>>926
言語の可搬性ではなくて、やりたいことを書いたプログラム(シェルスクリプト)の可搬性を言っているんだろ
比喩にはなってないだろう。C++で書いたDirectXを使ったソースの可搬性なんてないと自分でも言っているんだから
931: 2019/07/01(月)16:50 ID:2smzn43h(4/8) AAS
そりゃsedの「GNU拡張」をBSDで使えば可搬性はなくなるだろうけど
「拡張」って言葉の意味わかってる?
双方ともPOSIX sedには最低限準拠してるから、
POSIX sedの仕様だけを守ってればどっちの環境でも動く。
932: 2019/07/01(月)16:56 ID:0UaOtlQU(3/15) AAS
たぶん、ID:TT0ZFmIC はそういうレベルの話ではない
そもそも>>928は可搬性の話ではないだろう。POSIXにするとなお不便になるからな。可搬性の話なら最後の言葉は出ないだろう
933: 2019/07/01(月)18:51 ID:4+biahsm(4/5) AAS
可搬性高いシェルスクリプト書くならPOSIXで書く
これは間違っていない
でもPOSIXで何でも書けるわけじゃない
環境依存しないと書けない部分がある
POSIXは不完全な規格だってことだ
俺はPOSIX推進派だけどなw
934(6): 2019/07/01(月)19:18 ID:MoEwNeEz(1) AAS
まとめるとどこでも動くシェルスクリプトなんて都市伝説ってことだよね
935: 2019/07/01(月)19:21 ID:0UaOtlQU(4/15) AAS
そもそも可搬性可搬性って、そんなあれやこれやの環境を管理していんのかいっていう
シェルスクリプトで書けるものなんて全然たいしたことは書けないので、環境がしょうがなく変わったらそれに対して書き換えればいいだろうとしか思わんな
シェルクスリプトは単に補助的にしか使わない、本業は別の言語(IDE、最低限でもmakeが必要な)な俺は、可搬性可搬性って???だなw
936(1): 2019/07/01(月)19:22 ID:0UaOtlQU(5/15) AAS
>>934
「なんでも」は都市伝説
可能な範囲では全然可能(そこに苦労があってもw)
937: 2019/07/01(月)19:41 ID:ywGyCn2/(3/7) AAS
まとめるとどこでも動くC言語なんて都市伝説ってことだよね
C言語でゲームできないもん
938(1): 2019/07/01(月)19:42 ID:0UaOtlQU(6/15) AAS
イミフすぎwどうした?
939(1): 2019/07/01(月)20:52 ID:2smzn43h(5/8) AAS
まあ要するに、POSIXに準拠しとけばかなり可搬性の高いシェルスクリプトが書ける。
でもどんな言語でもそうであるように「完璧で」「完全な」可搬性は実現できない。
しかしまあ俺個人としてはシェルスクリプトは可搬性を高めやすい言語だと思うけどね。
ちゃんと実装から独立した文書としての規格があるし。
940: 2019/07/01(月)20:55 ID:2smzn43h(6/8) AAS
>>919
え?動作するんじゃないの?
>>917はあくまでコマンド同士のオプション形式が違うって言ってただけで
そのコマンド自体ではシステム間で互換性があるんでは?
941: 2019/07/01(月)21:09 ID:0UaOtlQU(7/15) AAS
>>939
あと、不完全なPOSIX規格でも、それがあればこそなにかあってもポーティングがどちからという楽すぎってのも
942: 2019/07/01(月)21:29 ID:2smzn43h(7/8) AAS
次スレ立てるときワッチョイを有効にしたいんだけど
どうすればいいんだっけ。
943: 2019/07/01(月)21:31 ID:0UaOtlQU(8/15) AAS
いや、いらないw
944(2): 2019/07/01(月)21:39 ID:ywGyCn2/(4/7) AAS
>>938
だからシェルスクリプトで、外部コマンドが違っていて動かないというのなら、
C言語で、APIが違っていて動かないよね
でも言語(シェルスクリプト or C言語)は可搬性が有るよね
言語以外の部分が異なっていたとしても。
ってことだけど?
945(2): 2019/07/01(月)21:51 ID:0UaOtlQU(9/15) AAS
>>944
なにを言いたいのかさっぱり。C言語ってわかってるの?
C言語でも>>934の通りだよ。C言語でゲームできないもんもイミフだったが、そのレスではソコの説明が書いてあるのかさえ不明w
946: 2019/07/01(月)21:54 ID:0UaOtlQU(10/15) AAS
>>945
誤 >>934の通り
正 >>936の通り
947: 2019/07/01(月)22:28 ID:KK3BgYtY(2/3) AAS
>>944
可搬性があるんじゃなくてコンパイルが通るだけ or プリプロセッサまでが通るだけ。
同じシステムコールでも SysV と BSD で動作が違うとかあって、コンパイル通るだけで碌に動かないものも出る。
C で可搬性を求めるなら automake 使ってどこが不都合かを確認しまくるしかない。
それも不完全なので最後は地道なデバッグ。
948(1): 2019/07/01(月)22:46 ID:ywGyCn2/(5/7) AAS
>>945
じゃあ可搬性がある言語ってなに?
その言語で作れば本当にどこでも動くの?
949: 2019/07/01(月)22:52 ID:0UaOtlQU(11/15) AAS
>>948
いきなりな問いだなwそんなこと言った覚えはないぞ?どうした?
いや、Cだって>>934の通り、可搬性のあるモノは作れる。どういう「モノ」によるかだがな
950: 2019/07/01(月)22:53 ID:0UaOtlQU(12/15) AAS
また間違っちゃった。>>934にはナニかあるのかw
951: 2019/07/01(月)22:54 ID:ywGyCn2/(6/7) AAS
> いや、Cだって>>934の通り、可搬性のあるモノは作れる。どういう「モノ」によるかだがな
結局
シェルスクリプトだって、可搬性のあるモノは作れる。どういう「モノ」によるかだがな
という答えかよw
952: 2019/07/01(月)22:55 ID:0UaOtlQU(13/15) AAS
って、言ってるじゃんww
その直後にイミフのレスしてたんじゃん。なんなの?ww
953(1): 2019/07/01(月)22:59 ID:2smzn43h(8/8) AAS
なんで0か1かにそんなに拘るのか。
「シェルスクリプトでは可搬性のあるものは書けない」
という(間違った)認識に対して
「シェルスクリプトには可搬性を持たせられる」
と是正しただけなのにね。
そして可搬性の問題はシェルスクリプトに限らない。
どんな言語にも完全な可搬性はないし、かといって全く可搬性がない訳でもない。
それだけの話をどうしてこうも荒立てられるかね……。
954(1): 2019/07/01(月)23:02 ID:ywGyCn2/(7/7) AAS
まとめるとどこでも動くシェルスクリプトは都市伝説じゃなくて作れるってことだよね
955(1): 2019/07/01(月)23:03 ID:0UaOtlQU(14/15) AAS
ですw
956: 2019/07/01(月)23:08 ID:0UaOtlQU(15/15) AAS
>>955は>>953宛て
>>954
そうだよ。モノによるけどw
957: 2019/07/01(月)23:20 ID:/rKj5XUf(1) AAS
次スレ
シェルスクリプト総合 その30
2chスレ:tech
958: 2019/07/01(月)23:37 ID:4+biahsm(5/5) AAS
おまえらまとめるの好きだよなw
959: 2019/07/01(月)23:41 ID:KK3BgYtY(3/3) AAS
POSIX (というか BSD の /bin/sh である dash?) に合わせたほうが幸せなのか
#!/bin/bash って書いて bash 限定にしたほうが幸せなのか。
個人的には後者でサクッと短時間でかつ可読性高く仕上げるのが好み。
960(1): 2019/07/01(月)23:44 ID:GotlxjDf(1) AAS
> というか BSD の /bin/sh である dash?
dashのdはdebian linuxのdな
> 個人的には後者でサクッと短時間でかつ可読性高く仕上げるのが好み。
それはPOSIX(dash)でもbashでも変わらん
961: 2019/07/02(火)00:01 ID:p7jTc1Zw(1) AAS
可搬性云々は要件次第なんだよ
動作保証は Ubuntuのみで良いなら環境依存で書けばいい
962(2): 2019/07/02(火)00:02 ID:Tm8GOmHy(1/2) AAS
>>960
> dashのdはdebian linuxのdな
これは勉強不足で失礼いたしました。
>それはPOSIX(dash)でもbashでも変わらん
POSIX(dash) で [[ =~ ]] って簡潔に書ける?
for ((i=0;16>i;i++)) ; do (loop内で $i 更新あり) とかは?
963: 2019/07/02(火)00:06 ID:+q6wCm94(1) AAS
GNU拡張はGNUの方言だけどBSDにも方言くらいあるでしょ
BSDだけで盛られたコマンドってないの
964(2): 2019/07/02(火)00:15 ID:Atdu9zIi(1/19) AAS
>>962
> POSIX(dash) で [[ =~ ]] って簡潔に書ける?
多くはcaseで十分。足りなければexprを使えばいい。
> for ((i=0;16>i;i++)) ; do (loop内で $i 更新あり) とかは?
seqかwhileを使えばいい
965(1): 2019/07/02(火)00:31 ID:rBxHnYzF(1/2) AAS
>>964
exprってPOSIXだも正規表現処理できるのか。
966(1): 2019/07/02(火)00:34 ID:uO4UDEG+(1/15) AAS
簡潔にって書いてあるだろうに
967: 2019/07/02(火)00:37 ID:Tm8GOmHy(2/2) AAS
>>964
loop 内更新ありだと seq はNG。
while は見た目簡潔じゃないし、インクリメント忘れる可能性もある。
968: 2019/07/02(火)01:41 ID:Atdu9zIi(2/19) AAS
>>966
> while は見た目簡潔じゃないし、インクリメント忘れる可能性もある。
忘れなければいいし、別に一行だろうが二行だろうが大差ない。
969: 2019/07/02(火)01:43 ID:Atdu9zIi(3/19) AAS
>>965
外部リンク[html]:pubs.opengroup.org
> The ':' matching operator shall compare the string resulting from the evaluation of expr1 with
> the regular expression pattern
970: 2019/07/02(火)01:44 ID:uO4UDEG+(2/15) AAS
好みって言っているのに。それはあなたの好み
好みに合うようななにかを提示するかスルーすればいいだろうに
971: 2019/07/02(火)03:09 ID:rBxHnYzF(2/2) AAS
>>962
[[ "$VAR" =~ '<regexp>' ]]
↓
expr "$VAR" : '<regexp>'
for ((i=0;16>i;i++)) ; do
echo $i
done
↓
i=0; while [ $i -lt 16 ]; do
echo $i
i=$((i+1)); done
こんなもんでいかがでしょ。
簡潔かつ高い可搬性を持ったシェルスクリプトになったと思う。
よければこれから書く可搬性の高いシェルスクリプトの参考にしてみて!
972: 2019/07/02(火)03:45 ID:uO4UDEG+(3/15) AAS
まさか、その変えた方が簡潔かつ高い可搬性を持ったという??
なんのためのbash(などの)の拡張なんだかだよ。俺には理解できない。まあ、ID:Tm8GOmHyが理解できたら特にだけど
973: 2019/07/02(火)03:49 ID:uO4UDEG+(4/15) AAS
ところで、while内での変数の変更とかどうしてんの?そんなにPOSIXに拘る人は
974(1): 2019/07/02(火)03:52 ID:uO4UDEG+(5/15) AAS
ああ、パイプでサブシェルになってしまう場合のwhileね。よく使うパターンの
975: 2019/07/02(火)03:55 ID:Atdu9zIi(4/19) AAS
たったこれだけの違いで大騒ぎ(笑)
976: 2019/07/02(火)03:58 ID:uO4UDEG+(6/15) AAS
お前がいうなw
977(1): 2019/07/02(火)04:01 ID:Atdu9zIi(5/19) AAS
>>974
今後の人生、サブシェルの中に移住すればいいだけだろ
cat dummy.txt | {
i=0
while IFS= read -r line; do
i=$((i+1))
done
echo "$i"
}
978(2): 2019/07/02(火)04:05 ID:uO4UDEG+(7/15) AAS
そのcatレベルで必要なんじゃね、普通は
そんな狭いパターンが主なのか?お前の人生は。俺の人生でそのパターンは少なさそう
そういうんじゃないよ普遍的wなのでだよ
979: 2019/07/02(火)04:05 ID:Atdu9zIi(6/19) AAS
>>978
イミフ。例を出せ例を
980: 2019/07/02(火)04:12 ID:Atdu9zIi(7/19) AAS
パターンを思いつかないのかレスが返ってこないので補足しておくと、
サブシェルになる場合というパターンだったから>>977のように書いたが
ファイルから読み取る場合は、そもそもサブシェルにしなくていい
i=0
while IFS= read -r line; do
i=$((i+1))
done < dummy.txt
echo "$i"
さて、>>978はどんなパターンを想定してるんだろうかw
981: 2019/07/02(火)04:21 ID:uO4UDEG+(8/15) AAS
なにか前処理
hoge=0
cat | while IFS= read -r line; do
[ なにか ] && hoge=1
ほかにいろいろ
done
if [ hoge = 0 ]; then
前処理の調整
else
前処理の調整
fi
とか。ループ中に例外的なのを検出した後にトップレベルで整理するとか。あとは、whileの後にもパイプで続けてその後でとか。局所的なので使うことはないな
気が短いなw
982: 2019/07/02(火)04:29 ID:Atdu9zIi(8/19) AAS
こうすればいいだけw
なにか前処理
cat | {
hoge=0
while IFS= read -r line; do
[ なにか ] && hoge=1
ほかにいろいろ
done
if [ hoge = 0 ]; then
前処理の調整
else
前処理の調整
fi
}
983(1): 2019/07/02(火)04:33 ID:uO4UDEG+(9/15) AAS
ほんとうにそれでいいと思うのか?w
なんか無理してんなと思うけど、POSIXに拘る人はそう書くのねと理解はした、お応えありがとう
984: 2019/07/02(火)04:35 ID:Atdu9zIi(9/19) AAS
>>983
正しく動くし何も問題ない。
お前こそ、何も言い返せないのに
無理してレスしなくていいぞw
985: 2019/07/02(火)04:37 ID:uO4UDEG+(10/15) AAS
いやあ、ああいうのが普通な人には何も言い返せないよ。てか「言い返す」って。喧嘩かなんかなのか?w
986: 2019/07/02(火)04:41 ID:Atdu9zIi(10/19) AAS
喧嘩じゃなくて、お前の意見を言えって。
正しく動くだろ?
なにか問題が有るのか?
987(1): 2019/07/02(火)04:45 ID:Atdu9zIi(11/19) AAS
シェルスクリプト初心者です。 { } の使い方がわかりません
とかいうなら、関数にでもすればいい
foo() {
なにか前処理
hoge=0
while IFS= read -r line; do
[ なにか ] && hoge=1
ほかにいろいろ
done
if [ hoge = 0 ]; then
前処理の調整
else
前処理の調整
fi
}
cat | foo
お前の苦手な { } が無くてすんだぞw
サブシェルうんぬんの前に、関数の中で使う変数は、関数の中にとどめておけよ。
わかりやすいコーディングというのはこういうものだ
988: 2019/07/02(火)04:47 ID:uO4UDEG+(11/15) AAS
そのサブシェルの中で後は全部やるんでしょ?必要な部分を。それで問題無いと思うなら、それでいいんじゃないの
「なんか無理してんな」ってのがわからないんだったらそれはそれでいいよ。元ネタと同じく、好みの問題。好みがわからないでしょ
989: 2019/07/02(火)04:50 ID:Atdu9zIi(12/19) AAS
だから問題ないし、お前を含めて誰も問題があると言ってない。
お前さ、なんで自分で問題点を指摘できないのに
さも問題があるかのように装ってるわけ?
ばれないとでも思った?
990: 2019/07/02(火)04:50 ID:uO4UDEG+(12/15) AAS
なにか頑張ってるな。そんな話じゃないよ
知識自慢臭しかもうしませんよ?そんなの自慢げというか馬鹿にしたいだけなのか知らんけど
991: 2019/07/02(火)04:53 ID:Atdu9zIi(13/19) AAS
そんな話じゃないよ → じゃあどんな話なのか → 答えずに逃げる(笑)
992: 2019/07/02(火)04:53 ID:uO4UDEG+(13/15) AAS
問題がある問題がないの話じゃないよ。好みだよ好み
そう次々あれこれ考えなくてもw bash(など)の拡張使えばスッキリだろうにという
993: 2019/07/02(火)04:54 ID:Atdu9zIi(14/19) AAS
>>987のどこがスッキリとしてないというのか?
お前ならbashでどう書き直す?w
994(1): 2019/07/02(火)04:57 ID:uO4UDEG+(14/15) AAS
hoge=0
while IFS= read -r line; do
[ なにか ] && hoge=1
ほかにいろいろ
done < <(cat)
if [ hoge = 0 ]; then
前処理の調整
else
前処理の調整
fi
そもそもやりたいことがレベルが変わらずにそのままでスッキリだなwあとあとでなにか追加もとかもね
995: 2019/07/02(火)04:58 ID:Atdu9zIi(15/19) AAS
>>994
それ、俺が書いたfoo関数の中身を書いただけじゃねーかw
hoge=0
while IFS= read -r line; do
[ なにか ] && hoge=1
ほかにいろいろ
done
if [ hoge = 0 ]; then
前処理の調整
else
前処理の調整
fi
これで動くよ。
foo() {
上のコード
}
cat | foo
ってやればいいだけ
996: 2019/07/02(火)05:01 ID:Atdu9zIi(16/19) AAS
Q.これをPOSIX準拠で書きたいのですが?
hoge=0
while IFS= read -r line; do
[ なにか ] && hoge=1
ほかにいろいろ
done < <(cat)
if [ hoge = 0 ]; then
前処理の調整
else
前処理の調整
fi
A. まず1. 関数にしましょう
foo() {
hoge=0
while IFS= read -r line; do
[ なにか ] && hoge=1
ほかにいろいろ
done < <(cat)
if [ hoge = 0 ]; then
前処理の調整
else
前処理の調整
fi
}
foo
997(1): 2019/07/02(火)05:01 ID:uO4UDEG+(15/15) AAS
いや、だから、お題に対してだけじゃなくな。普遍的にって言ってるでしょ
それが普遍的なのか?
なんで否定されたのをそんなに拘るねん。否定してんのは俺の好みじゃないってだけだぞ?w
998: 2019/07/02(火)05:01 ID:Atdu9zIi(17/19) AAS
2. bash依存の命令をなくしましょう。
foo() {
hoge=0
while IFS= read -r line; do
[ なにか ] && hoge=1
ほかにいろいろ
done
if [ hoge = 0 ]; then
前処理の調整
else
前処理の調整
fi
}
cat | foo
はい。完成です(笑)
999: 2019/07/02(火)05:02 ID:Atdu9zIi(18/19) AAS
>>997
だから < <(cat) を使う場合の普遍的な解答
1000: 2019/07/02(火)05:02 ID:Atdu9zIi(19/19) AAS
やっぱり書き方を知らんだけだったな(笑)
1001(1): 1001 ID:Thread(1/2) AAS
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 283日 5時間 28分 4秒
1002(1): 1002 ID:Thread(2/2) AAS
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
外部リンク:premium.5ch.net
▼ 浪人ログインはこちら ▼
外部リンク[php]:login.5ch.net
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.287s*