1 名前:デフォルトの名無しさん mailto:sage [2019/08/10(土) 23:17:50.64 ID:L+B8OP2P.net] シェルスクリプトに関する総合スレッドです。 全般 ・荒しは無視しましょう。 ・丁寧な姿勢を心掛けましょう。 ・ネチケット(死語)を意識しましょう。 ・「○○(他の言語)でいいやん」は禁止。他のスレに行ってください。 シェルスクリプト総合 その30 https://mevius.5ch.net/test/read.cgi/tech/1561989867/
809 名前:デフォルトの名無しさん mailto:sage [2019/10/03(木) 07:38:56.48 ID:vim6DLSQ.net] >>790 ありがとうございます 今のところThunarに標準昨日の一括リネームでなんとかなりました >>791 ,792 ls: 'aaa (bbb) ccc.jpg'にアクセスできません: みたいな感じになりましたね
810 名前:デフォルトの名無しさん mailto:sage [2019/10/03(木) 08:37:13.31 ID:/bA39X9L.net] 小数の計算がPOSIXで標準化されるって本当? これどうにかしてほしいんだが $ zsh -c 'echo $((0.1+0.2))' 0.30000000000000004 固定小数点をサポートしてくれよ。
811 名前:デフォルトの名無しさん [2019/10/03(木) 09:12:38.31 ID:BSBvRGI4.net] 各言語での 0.1 + 0.2 の結果 0.30000000000000004.com/
812 名前:デフォルトの名無しさん [2019/10/03(木) 09:41:30.99 ID:T62xH6xP.net] 言語というよりはどういうライブラリ使っているかの問題だと思うが
813 名前:デフォルトの名無しさん mailto:sage [2019/10/03(木) 09:46:51.64 ID:wbZFe5vy.net] きちんと0.3返す言語は 分子と分母の2つ記録するから速度は遅くなる 遅いシェルスクリプトの選択した方法は正しい
814 名前:デフォルトの名無しさん mailto:sage [2019/10/03(木) 09:50:59.70 ID:/bA39X9L.net] いや、誰が浮動小数点数的な答えを求めてるのよ? 誰も数学的に間違った答えなんか求めてないでしょ?
815 名前:デフォルトの名無しさん mailto:sage [2019/10/03(木) 13:46:15.91 ID:oxXSy4fC.net] 固定小数点なんて採用することはないな 提案してみろ、まずはStandard C Libraryとして
816 名前:デフォルトの名無しさん mailto:sage [2019/10/03(木) 14:46:29.02 ID:Fw9k5QN4.net] >>801 ライブラリというより、内部での浮動小数点の形(float,double,long doubleのどれか。いまどきfloatは無いか)、および、いつ丸めてるかだけじゃね >>800 のも大体は結局はCでの結果でしかないだろう。デフォのdoubleの結果がほとんどだろう 例えば、awkは問題ないように見えるが。2.3 / 0.1 = 23 だが、int(2.3/0.1) = 22 になるのも
817 名前:デフォルトの名無しさん [2019/10/03(木) 14:56:31.03 ID:gitagY/F.net] >>805 いや、だからライブラリだろ。 同じ言語でも内部表現に関する決まりのない言語なら例えばBCDで保持するようにしてそれ用のライブラリで計算や10進文字列変換したって構わないんだからな。
818 名前:デフォルトの名無しさん mailto:sage [2019/10/03(木) 15:03:35.77 ID:Fw9k5QN4.net] そういうある意味特殊なことをしようとする意志のがあればな 結局はCなんだよどういう言語でもああいう部分は。そしてCがそうだからただそうなだけ。わざわざ言うようなことをするのは極めて少ないだろ 浮動小数点がIEEEで決められてる正規なものだし。特殊なプログラムを使えということだよ=シェルとかに求めるのは現在のコンピュータ界隈では無理筋だな
819 名前:デフォルトの名無しさん mailto:sage [2019/10/03(木) 15:08:16.36 ID:wbZFe5vy.net] perl か何かに任せておけ #!/usr/bin/env perl use bigrat; my ( $ss, $F, $ISO ) = (@ARGV); unless ( defined $ISO ) { $ISO = 100 } my %shutter_speed = ( 30 => -5, 25 => -14/3, 20 => -13/3, ...... ); printf "%s\n", 0/1 + $shutter_speed{$ss} + $F_number{$F} - $ISO_number{$ISO}; ただし perl bigrat だと 0/1 + を抜くと型が整数処理されるというわけのわからん挙動するケースがあったから 別の言語がいいけど
820 名前:デフォルトの名無しさん mailto:sage [2019/10/03(木) 17:47:54.90 ID:vTPkh0Cq.net] >>807 浮動小数点とIEEE754は同じ意味じゃないから語弊が生まれるよ。 文字コードとUTF-8ぐらいの関係だろう。 そして大抵の小数を扱えるプログラムがCでIEEE754に準拠した浮動小数点による取り扱いをしてるって意見は、全然同意できないな。
821 名前:デフォルトの名無しさん mailto:sage [2019/10/03(木) 18:03:01.77 ID:NYKgu9W2.net] 1. 数学的には正しくない。 2. 速度のために正確さを犠牲にしている。 3. 誰も間違った答えは望んでいない 仕様だから〜とかいう話じゃないんだよね。 本当はみんな正しい答えが欲しい。 シェルスクリプトに速度は重要じゃないんだから 正しい答えのほうが便利だろ
822 名前:デフォルトの名無しさん mailto:sage [2019/10/03(木) 18:39:51.77 ID:K4DSf+RO.net] ほとんど近似値でたりるし必要なら自分でつくるなりすればとしか思わないよ
823 名前:デフォルトの名無しさん mailto:sage [2019/10/03(木) 18:40:45.48 ID:Fw9k5QN4.net] >>809 浮動小数点とIEEE754は同じ意味じゃないって?何を言いたいのかわからん IEEE準拠じゃない独自のがあると?今時はFPUでやってるもんだし、速度なんぞを犠牲にしてまでもそういうのを「わざわざ」をやっている=それがウリになるからすぐに探せるんじゃないかなあ? >>810 コンピュータサイエンス的にはそんなのはない=シェルスクリプト作る人も、そんな目新しいことをわざわざしないだろうとしか思えんな、いくらそう言っても
824 名前:デフォルトの名無しさん mailto:sage [2019/10/03(木) 20:14:25.67 ID:A9ow2usS.net] >>811 0.1+0.2が0.3にならなくてもいいよっていう業界を教えてくれ
825 名前:デフォルトの名無しさん [2019/10/03(木) 20:20:38.23 ID:gitagY/F.net] 適当なところで丸めりゃ良いんだからいいじゃねえか
826 名前:デフォルトの名無しさん mailto:sage [2019/10/03(木) 20:23:06.87 ID:Fw9k5QN4.net] 少数なんて大体でしかないなんて常識だと思ってたのにな。少数使わないでも結局できたりするので、また、固定少数でも結局工夫が必要なのには変わりないので なんでそんなに少数の正しさに拘っているのだか、どういう業界でそういうのをしかもスクリプトオンリーで書かなきゃならないって想像できないな
827 名前:デフォルトの名無しさん mailto:sage [2019/10/03(木) 20:30:23.62 ID:KR7C+a5e.net] >>813 必要なら用途に合うもん使えよ
828 名前:デフォルトの名無しさん mailto:sage [2019/10/03(木) 23:39:56.70 ID:5pSilKMJ.net] 気が付いたら少数を使うことがほとんどなくなった 利子の計算ぐらいだが、これは何桁で計算を打ち切るか あらかじめ決めておく。安易に double とか使わない
829 名前:デフォルトの名無しさん mailto:sage [2019/10/03(木) 23:43:58.79 ID:6kVVAM38.net] 簡単なシェルスクリプトしか書けんが何が覚えとけって言語ある? s以外のsedの機能をようやく覚えたけどコマンドは文字列操作系で手一杯だわ やっぱりperlの呪文覚えるしかないか
830 名前:デフォルトの名無しさん mailto:sage [2019/10/03(木) 23:49:00.65 ID:wbZFe5vy.net] パイプが強烈だから文字列処理に強い perl でしょ オブジェクト指向はいらない
831 名前:デフォルトの名無しさん mailto:sage [2019/10/04(金) 00:41:14.19 ID:jIZSSFYe.net] >>818 JavaScript
832 名前:デフォルトの名無しさん mailto:sage [2019/10/04(金) 00:43:47.35 ID:jIZSSFYe.net] >>817 それな。何桁で計算を打ち切るだと、どこで誤差が出るか想定しやすいが doubleとかだと、桁数小さくても誤差が出るから、想定しづらいんだよね。 シェルスクリプトは型が文字列しか無いんだから、 内部の都合である数値型には影響されてほしくないな
833 名前:デフォルトの名無しさん [2019/10/04(金) 01:20:38.52 ID:5l5U7bxj.net] >>812 文字コードってのは文字に番号を割り振って取り扱いますよ、という概念。 浮動小数点も一緒で、有限の長さの小数を、小数点の位置を自由にすること (仮数部と基数部で表現する)ことで表しますよって概念。 各ベンダーが独自に実装したら不便極まりないから文字コードにおけるUnicode(とかUTF-8)と同様IEEE754という標準がある。 浮動小数点演算、と言ったときにそれは一概にIEEE754内部表現を用いた演算とはならない。 https://ja.wikipedia.org/wiki/任意精度演算 の方式の中にはIEEE754でない浮動小数点表現を取り扱ってるものだってあるだろう。 BCDで小数が扱えるライブラリだってそう言うのが多いと思うよ。 IEEE754の仕様の浮動小数点演算で十分な場合は、CPUに便利命令が用意されてて1桁ずつ計算とかしなくても 一発で計算が求まるからIEEE754の浮動小数点は使われている、というだけでしょ。 浮動小数点っていう大きい概念がどういったものかってのと、IEEE754はその概念を実現するための一例でしかないってのを、 Wikipediaなり読み込んで理解したほうが良いと思うよ。 ほんと、文字コードとUTF-8は同じものだ、って言ってるぐらいトンチンカンだから
834 名前:デフォルトの名無しさん mailto:sage [2019/10/04(金) 01:34:09.77 ID:N11Kz3K2.net] >>813 セブンイレブンとか
835 名前:デフォルトの名無しさん mailto:sage [2019/10/04(金) 01:44:25.75 ID:eSKeLXlH.net] >>818 1-liner、パイプ、CSV・テキスト処理、クローラーなら、可読性が高い、Ruby ! Perl のような謎のような記号は少ない
836 名前:デフォルトの名無しさん mailto:sage [2019/10/04(金) 03:06:51.70 ID:gCVTKDJQ.net] >>822 他のが無いというのではなく、実際に使われている多くはというのだよ 実際に使われているのはどれだけあるの?わざわざ使ってるのならそれは意味があるのだから、そうナニか書いてあってすぐにわかるだろうという。例えばbcのように https://ja.wikipedia.org/wiki/IEEE_754 多くのプロセッサなどの〜 から書いてある通り。Javaがそうでないように書いてあるが、 https://www.ibm.com/developerworks/jp/java/library/j-jtp0114/index.html 同様に、java.math.BigDecimal が提供する任意精度の10進数もアプリケーションで使用されることは少ないため、開発者に無視されているケースがほとんどです しかし整数を中心としたプログラムに、突如、整数以外の表現が出てくることがあります。たとえば、JDBCではSQLDECIMAL 列の優先変換形式としてBigDecimal が使用されます なんてある意味それを表しすぎなくらい(まあ、ここは作る側ではなく使う側を言ってるけど) CPUに便利命令ってFPUに対するのこと?一発で計算が決まるからという簡単だからとかじゃなくて、FPUがあるのはハードで支援用意しないとそもそも浮動小数点は重い演算だからなんだけど >文字コードとUTF-8は同じものだ、って言ってるぐらい いや、言ってないけど、なにか思い込みが激しいね。IEEEが利用されないのも普通という考え方もそうだが
837 名前:デフォルトの名無しさん mailto:sage [2019/10/04(金) 03:13:49.05 ID:gCVTKDJQ.net] >>825 >Javaがそうでないように書いてあるが ああ、違ったしつれい。IEEE 754 を必須か 使ってないってどれだ?どういう理由でという思いがあって、おおと思ったんだけど
838 名前:デフォルトの名無しさん mailto:sage [2019/10/04(金) 04:25:45.39 ID:jIZSSFYe.net] もうさ、ハードで固定小数点数演算できるようにしたほうが良いんじゃね? 時代的にさ
839 名前:デフォルトの名無しさん mailto:sage [2019/10/04(金) 05:02:19.85 ID:Lr70dHDq.net] BCDはCPUで支援してた(そういう命令があったが)ようだが、無くなったっぽいという BCDは速度的に有利な側面があるからわざわざそれ専用に用意しなくてもで無くなったかもしれない
840 名前:デフォルトの名無しさん mailto:sage [2019/10/04(金) 07:56:41.21 ID:sZOtDaP2.net] >>827 お前さんがこだわるほど他の人は必要だと思ってない。あったら便利なケースもあるかも知れんがコストなどに見合わないから誰もやらない。
841 名前:デフォルトの名無しさん mailto:sage [2019/10/04(金) 08:55:49.66 ID:UTOwlhyp.net] 消費税の話もあるし、固定小数点は重要だよ
842 名前:デフォルトの名無しさん mailto:sage [2019/10/04(金) 11:44:19.51 ID:VMw2vpri.net] 固定小数点演算なんて整数演算と同等だからわざわざハードで実装しなくても問題ない
843 名前:デフォルトの名無しさん [2019/10/04(金) 14:32:11.23 ID:hcjI0QEW.net] >>818 そのままPerl覚えれば良い。 というのは、昔からあってあちこちで使われており、だいたいの Linux distribution はデフォルトでインストールされるような言語であるため。 インストールや環境整備で悩まなくて済む。後からモジュールを追加するとしても最初からrpmファイルがあったり、なくてもCPANを利用して簡単にインストールできる。 歴史が長く昔から使われて来たのでモジュールも沢山あり、またそれを解説しているサイトも多い。
844 名前:デフォルトの名無しさん [2019/10/04(金) 14:36:19.79 ID:hcjI0QEW.net] >>824 知らない言語を見ればどれも謎の記号だらけに見えるとは思うけどね。 まあでもPerlは確かに多いかな。なるべく使わないようにも書けるが。
845 名前:デフォルトの名無しさん mailto:sage [2019/10/04(金) 14:37:02.99 ID:5wfXTPgW.net] alpine linuxでperllインストールされてないんだが?
846 名前:デフォルトの名無しさん [2019/10/04(金) 14:42:01.29 ID:hcjI0QEW.net] >>831 そうそう。整数計算後に割って桁合わせすれば良い。
847 名前:デフォルトの名無しさん [2019/10/04(金) 14:42:43.80 ID:hcjI0QEW.net] >>834 そうか。まあそういうのもある。
848 名前:デフォルトの名無しさん mailto:sage [2019/10/04(金) 14:43:52.73 ID:M3k51a5A.net] 必要ならインストールすれば良いだけだ
849 名前:デフォルトの名無しさん mailto:sage [2019/10/04(金) 14:59:17.54 ID:5wfXTPgW.net] 余計なものに依存したくない
850 名前:デフォルトの名無しさん mailto:sage [2019/10/04(金) 17:13:04.07 ID:/U6oHgYD.net] そりゃお前の趣味だからな perlを使いたいならインストールする 当たり前の話だよな
851 名前:デフォルトの名無しさん mailto:sage [2019/10/04(金) 21:55:54.53 ID:a0HWEhLa.net] perlを使いたいわけじゃないからなぁ
852 名前:デフォルトの名無しさん mailto:sage [2019/10/04(金) 22:57:45.34 ID:eSKeLXlH.net] Perl, Python2・3 は最初から、入っているけど、 Ruby も、apt で、簡単にインストールできる ただし、Ruby 2.3 〜 2.6 で、プログラマーが、新しめの書き方をしていた場合に、 古いバージョンで動かないことがあるかも
853 名前:デフォルトの名無しさん mailto:sage [2019/10/06(日) 09:16:44.91 ID:XBuBF2Rc.net] 全員がsudo権限あるわけじゃないしな・・・
854 名前:デフォルトの名無しさん mailto:sage [2019/10/06(日) 09:44:40.51 ID:462kqzf/.net] perlなんて普通に入ってるからな Solaris、AIX、HP-UX、FreeBSD、Ubuntu、Centos、Redhat、Fedora 俺が触ってきたシステムではデフォルトで入ってたな 入ってない方が少数派だろ
855 名前:デフォルトの名無しさん mailto:sage [2019/10/06(日) 11:20:12.25 ID:NnE09bAt.net] 少数派だが入ってない
856 名前:デフォルトの名無しさん mailto:sage [2019/10/06(日) 11:24:56.60 ID:kChpVj98.net] 所属する研究室のMFにも入ってねーな。 Bシェルとかは(もちろん)入ってるけど そういう点で言えばPOSIX準拠のシェルがあるようなシステムにはPerlも入っていて PerlもないようなシステムにはPOSIX準拠シェルもないのかも知れんw
857 名前:デフォルトの名無しさん mailto:sage [2019/10/06(日) 12:03:22.79 ID:NnE09bAt.net] だからAlpine linuxにはPOSIX準拠のシェルは入っているが Perlは入ってないんだって。 いい加減Perl依存やめようぜw
858 名前:デフォルトの名無しさん mailto:sage [2019/10/06(日) 12:15:46.78 ID:rthNV3zo.net] 俺達もそろそろPOSIX汚染から脱却しようぜ
859 名前:デフォルトの名無しさん mailto:sage [2019/10/06(日) 12:17:46.00 ID:NnE09bAt.net] >>847 じゃあ言い出しっぺのあなたから、POSIXが含まれてる LinuxやBSDやUnixやMacやWindowsを使うのをやめてください
860 名前:デフォルトの名無しさん mailto:sage [2019/10/06(日) 12:21:19.21 ID:rthNV3zo.net] そもそも使ってないし
861 名前:デフォルトの名無しさん mailto:sage [2019/10/06(日) 12:28:35.75 ID:NnE09bAt.net] サーバー側で使われてる
862 名前:デフォルトの名無しさん mailto:sage [2019/10/06(日) 12:38:20.58 ID:462kqzf/.net] 相変わらずPOSIX原理主義者が張り付いてるんだな 日本は信教の自由はあるが強要するのは犯罪だ 他人を巻き込まないで1人でやってろよ
863 名前:デフォルトの名無しさん mailto:sage [2019/10/06(日) 12:54:03.04 ID:NnE09bAt.net] だからPOSIX原理主義じゃないってw Alpineはbusybox使ってるからPOSIX未満なんだよ
864 名前:デフォルトの名無しさん mailto:sage [2019/10/06(日) 13:05:31.69 ID:462kqzf/.net] お前はperl使いたくないんだろ? お前の自由だし好きにすればいい それを他人に押し付けるなと言っている 俺は普通にperlを使う 俺の自由だし好きにする 以上
865 名前:デフォルトの名無しさん mailto:sage [2019/10/06(日) 13:12:15.17 ID:rthNV3zo.net] ∧∧ ミ _ ドスッ ( ,,)┌─┴┴─┐ / つ. 終 了 │ 〜′ /´ └─┬┬─┘ ∪ ∪ ││ _ε3 ゛゛'゛'゛
866 名前:デフォルトの名無しさん mailto:sage [2019/10/06(日) 13:16:18.11 ID:NnE09bAt.net] 誰もPerl使うなって言ってないだろ。 Perlが入ってない環境があるという 事実を言ってるんだが
867 名前:デフォルトの名無しさん mailto:sage [2019/10/06(日) 14:00:34.35 ID:mC4FM69a.net] >>845 そのミッドフィールダーってなに?
868 名前:デフォルトの名無しさん [2019/10/06(日) 14:56:55.93 ID:VRfDnOhz.net] マネーフォワードだろ。
869 名前:デフォルトの名無しさん [2019/10/06(日) 17:41:58.00 ID:3lXqNGxa.net] 容量削減のためにPerlだけ抜くのも変だしそれ目的なら他のも入ってないのでは?
870 名前:デフォルトの名無しさん mailto:sage [2019/10/06(日) 21:01:12.68 ID:TprJMO+0.net] まぁないものどうこう言っても始まらない ただwin のiE6とかのようにubuntu以外は淘汰されていくだろうから 最終的には問題ないんじゃない?
871 名前:デフォルトの名無しさん [2019/10/06(日) 21:15:53.96 ID:/W6lnfS0.net] Linuxはdistributionごとに色々目的が違うからPerl入ってないのがあっても特に不思議はない。 AndroidのベースのLinuxにも入ってないし、普通はそこでは必要とされない。
872 名前:デフォルトの名無しさん mailto:sage [2019/10/06(日) 21:31:35.20 ID:1e7RWsdc.net] AndroidをLinuxとして使ってるのはどれだけいるのかと
873 名前:デフォルトの名無しさん mailto:sage [2019/10/06(日) 22:18:30.79 ID:+aq+gJyQ.net] それ向けの端末エミュレータとかシェルスクリプト編集実行とかは結構種類あるけどね 割合は少ないだろうね
874 名前:デフォルトの名無しさん mailto:sage [2019/10/07(月) 02:35:02.37 ID:qQU+qyu9.net] そういう人はperlも必要なら入れるな。perlに限らず
875 名前:デフォルトの名無しさん mailto:sage [2019/10/07(月) 08:39:27.35 ID:4YPUQoiH.net] >>818 Python やっとけ。 perl は成仏させろ
876 名前:デフォルトの名無しさん [2019/10/07(月) 12:58:26.99 ID:lSqRbxbA.net] PerlはCの如くしぶとく残ってしまうと思うなあ。
877 名前:デフォルトの名無しさん mailto:sage [2019/10/07(月) 14:23:04.89 ID:MItW4Ls8.net] sedやawkを忘れたんで代わりにperlを使うことが結構ある
878 名前:デフォルトの名無しさん mailto:sage [2019/10/07(月) 15:51:12.82 ID:Wc5EJs/z.net] perl -peをsed代わりに使ってるだけでperl自体には興味ないや 正規表現しか出番ないし使う機会がないんだよね awkとかgrepとかどうせ他のコマンドも
879 名前:覚えなきゃならんし [] [ここ壊れてます]
880 名前:デフォルトの名無しさん mailto:sage [2019/10/08(火) 14:32:15.36 ID:C04IGCd6.net] >>865 残ることは残るだろうけど、誰からも見捨てられてる状態で生き延びていても学ぶ価値はない。 プログラミング言語人気トップ8、過去15年間で安定 - 例外はPython 2019/10/07 14:16 後藤大地 https://news.mynavi.jp/article/20191007-905781/ TIOBE Softwareから、2019年10月のTIOBE Programming Community Index (PCI)が公開された。 TIOBE PCIは、複数の検索エンジンの検索結果から、対象となるプログラミング言語がどれだけ話題に なっているかをインデックス化したもの。(中略) TIOBE Softwareは発表の中で、毎年新たなプログラミング言語が登場しているものの、TIOBE Programming Community Indexのトップ8は過去15年間でほとんど変化していないと説明した。 Perlが消えてPythonに入れ替わったことや、Objective-Cが消えてSwiftに替わったというのが大きな 例外で、それ以外に大きな変動はないと指摘している。 ただし、プログラミング言語の分野に関してはいくつかの傾向があるとして、その例としてPHPやPerlから Pythonへ移っていること、新しいプログラミング言語としてDart、Scala、Lua、Rust、Kotlin、TypeScript などが人気上昇の渦中にあることなどを説明している。 10月TIOBE Programming Community Index / 円グラフ https://news.mynavi.jp/article/20191007-905781/images/001.jpg
881 名前:デフォルトの名無しさん mailto:sage [2019/10/08(火) 15:00:13.27 ID:dg9qT1Hg.net] Perlはsedやawkと同じ位置で見ないとだめだよ シェルスクリプトを書くときにsedやawkのように使う道具のひとつ もちろんシェルスクリプトをまるごとPerlのスクリプトに置き換えてもいいけどそれは別の話 Perlを排除するのは武器を一つ捨てるようなもので損してるよ
882 名前:デフォルトの名無しさん mailto:sage [2019/10/08(火) 15:03:58.28 ID:4CpPhkv4.net] 汎用言語としてはpython の時代に移ったかもしれないが 文字処理言語としてはいまだ現役
883 名前:デフォルトの名無しさん mailto:sage [2019/10/08(火) 15:16:45.62 ID:wc9EJfFY.net] >>869 と言ってもお前、sedやawkが使えないから perlを使ってるだけやん。 お前の問題であって、perlである必要ないやん
884 名前:デフォルトの名無しさん mailto:sage [2019/10/08(火) 15:49:08.88 ID:dg9qT1Hg.net] 俺当然sedもawkも使えるんだけど? awkで複雑になる処理をPerlで可読性高く楽に書いてるってだけ あんたも使える道具をうまく選べばいいんでPerlを知らなくても気にするな
885 名前:デフォルトの名無しさん mailto:sage [2019/10/08(火) 16:39:54.73 ID:9VgyN7XE.net] 「Perlの方が楽に書ける」なんていうのは個人の嗜好に依存してて,ほとんど無根拠に近い。 もしPerlの「素晴しさ」とやらを報しめたいのなら,もっと客観的な事実――導入率・実績云々――を提示したほうがいいよ。 尤も,俺に言わせればAWKのほうが〜Perlのほうが〜なんていう議論とも呼べない喧嘩それ自体くだらねぇけどな
886 名前:デフォルトの名無しさん mailto:sage [2019/10/08(火) 17:07:54.66 ID:uaD7+k1O.net] >>872 sed もawk も使えるならPython を使えばいいじゃん。 お前がPythonを使えないだけだろ。
887 名前:デフォルトの名無しさん mailto:sage [2019/10/08(火) 17:13:16.90 ID:gh1TIWVl.net] python使ってわざわざ長いコード書いてどうするの? sed -e 's/ABC/XYZ/' file1.txt python -c 'import sys,re; [print(re.sub("ABC","XYZ",l,1),end="") for l in sys.stdin]'
888 名前:デフォルトの名無しさん mailto:sage [2019/10/08(火) 18:40:06.69 ID:4CpPhkv4.net] gnu sed なら -e すら省けるんだよな
889 名前:デフォルトの名無しさん [2019/10/08(火) 18:40:15.32 ID:g
] [ここ壊れてます]
890 名前:O+Oxfwr.net mailto: こうして宗教戦争が始まったのです。 [] [ここ壊れてます]
891 名前:デフォルトの名無しさん mailto:sage [2019/10/08(火) 19:07:13.65 ID:/hvysQLZ.net] pythonはワンラインにはあまり向かんのは同意。 フリーフォーマットじゃないんで当たり前といえば当たり前か。
892 名前:デフォルトの名無しさん mailto:sage [2019/10/08(火) 19:30:38.22 ID:vS76WaY3.net] 宗教戦争は自分の信じるものが正しく、それ以外は認めないという非寛容が原因で始まる
893 名前:デフォルトの名無しさん mailto:sage [2019/10/09(水) 02:18:53.91 ID:CaMm18My.net] python ワンライナーに挑戦 〜 初心者のお勉強 m(_ _)m - Qiita https://qiita.com/wyamamo/items/667c79db7edbaa9a46a7 闇Pythonista入門(Pythonワンライナーのテクニック集) - Qiita https://qiita.com/cocuh/items/37bfdc0f24750127e7d3 杓子定規にするからこうなる 知恵比べはまた別の課題だろうに
894 名前:デフォルトの名無しさん [2019/10/11(金) 19:00:05.85 ID:QtmRuluN.net] case $value in *-*=*-*) esac こんなふうに、*が複数ある場合の動きとかちゃんと仕様化されてるの どのシェルでも同じように動く?
895 名前:デフォルトの名無しさん mailto:sage [2019/10/11(金) 19:51:09.99 ID:5TKzffM3.net] 「されてるの?」 なのか 「されてるの(だ)」 なのか。
896 名前:デフォルトの名無しさん [2019/10/11(金) 22:19:25.99 ID:EZwTHuUV.net] >>881 https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_13_02
897 名前:デフォルトの名無しさん [2019/10/12(Sat) 11:56:42 ID:6fabclhr.net] >>883 意味がわからん abbb 、という文字に対して、a*b はマッチするのが正しいの? aに続く残りのbは*で全部消費されるんじゃないの? $ sh -c 'case "a-b-c-b-c-b-c" in (a*b*c) echo ok; esac' $ sh -c 'case "a-b-c-b-c-b-c" in (a*b*c*b*c) echo ok; esac' $ sh -c 'case "a-b-c-b-c-b-c" in (a*b*c*b*c*b*c) echo ok; esac' すべてokってでる どういうアルゴリズムなのかわからない
898 名前:デフォルトの名無しさん mailto:sage [2019/10/12(土) 13:05:32.76 ID:19ZHiYan.net] Perlの正規表現なら最長マッチがデフォ
899 名前:デフォルトの名無しさん [2019/10/12(Sat) 17:15:42 ID:1KIHwFcK.net] IPアドレスもgreedyが基本だな。
900 名前: mailto:sage [2019/10/13(Sun) 14:15:24 ID:wtTHifIn.net] ワイルドカードもだよね
901 名前: mailto:sage [2019/10/15(Tue) 20:13:38 ID:tkdZ32xn.net] >>884 感覚的に分かりやすい https://media.theync.com/videos/6/9/0/4/8/6904895d700f71ce3e9.mp4
902 名前:デフォルトの名無しさん [2019/10/16(Wed) 03:31:59 ID:Pvq8peJ9.net] >>888 グロ
903 名前:デフォルトの名無しさん [2019/10/16(水) 08:08:38.68 ID:9/jaba51.net] 変数名を変数で指定できるのは欠陥じゃねえ
904 名前:デフォルトの名無しさん [2019/10/17(木) 13:11:40.29 ID:huR1Dm0j.net] はー、すげー。yashの実装に感動した getopts "ab" OPT -ab echo "$OPT $OPTIND" # => a 1:2 getopts "ab" OPT -ab echo "$OPT $OPTIND" # => b 1:3 getopts "ab" OPT -ab # exit status = 1 echo "$OPT $OPTIND" # => ? 2
905 名前: mailto:sage [2019/10/17(Thu) 16:55:00 ID:PM8kIYTO.net] if ls "*.txt" > /dev/null 2>&1 then echo "OK" else echo "NG" fi まったくうまくいかない なぜ単なるファイルの存在確認だけにこんな苦労するのか
906 名前: mailto:sage [2019/10/17(Thu) 17:04:24 ID:z1/RyPhF.net] ファイルの存在確認なら、-fを使えばいいだろ?
907 名前: mailto:sage [2019/10/17(Thu) 17:05:16 ID:e7ZwLQTq.net] # # ls *txt && echo ok || echo bad ls: '*txt' にアクセスできません: No such file or directory bad # # touch foo.txt # # ls *txt && echo ok || echo bad foo.txt ok こんな要領か?
908 名前: mailto:sage [2019/10/17(Thu) 17:05:47 ID:z1/RyPhF.net] あ、ディレクトリに *.txt があるかどうかってことか?
909 名前: mailto:sage [2019/10/17(Thu) 17:08:50 ID:PM8kIYTO.net] >>893 ところがワイルドカード使うと途端に何も引っかからなくなる
910 名前: mailto:sage [2019/10/17(Thu) 17:09:26 ID:PM8kIYTO.net] >>895 そうです
911 名前: mailto:sage [2019/10/17(Thu) 17:10:05 ID:z1/RyPhF.net] getopts vs getopt だけどさ、 BSDにおいてgetoptのメリットって何? BSD版のgetoptはロングオプションに対応してないし、 引数にスペースが入ったらうまく行かないし 使い勝手悪いと思うんだが。 もしかして最初に作られたのがgetoptで それを改良してgetoptsがシェルビルトインとして作られた。 (その後GNU版getoptが改良され、getoptsよりも便利になった) という流れだったりするの?
912 名前: mailto:sage [2019/10/17(Thu) 17:10:16 ID:e7ZwLQTq.net] 普通のプログラミング言語と違って シェルスクリプトはブーリアンの分岐は可能なら if else 使うよりも && || が見やすく良いと思う
913 名前: mailto:sage [2019/10/17(Thu) 17:12:52 ID:PM8kIYTO.net] >>894,899 いけた 分岐後の処理も大したことしないしこれでやってみようと思う?
914 名前: mailto:sage [2019/10/17(Thu) 17:13:24 ID:z1/RyPhF.net] >>896 アスタリスクを使うと、シェルが解釈して、 例えば、 ls * だと、 ls file1 file2 file3 file4 って実行したのと同じことになるんだぞ。 lsコマンドの中からはアスタリスクが使われてるかどうかなんてわからない。 そしてダブルクォートで括ると、lsコマンドの中から引数は "*" という文字列が渡されたようになるんだよ。
915 名前: mailto:sage [2019/10/17(Thu) 17:14:21 ID:ieavKq01.net] うまくいかなかった原因分かった?
916 名前:デフォルトの名無しさん mailto:sage [2019/10/17(木) 17:19:49.73 ID:z1/RyPhF.net] >>899 それだめ。 shellcheck使ってみ、エラーになる。 shellcheck において && || みたいな三項演算子風な使い方は func && VALUE=ok || VALUE=ng という書き方(変数代入)のみ認められる。 func && foo || bar は認められない。 なぜかと言うと、 1. func が 正常終了して 2. foo が 異常終了すると 3. bar が 実行されるから 変数代入に限れば必ずVALUE=okは正常終了するから、 この書き方に限って許されてる。 だから、一応fooが必ず正常終了するものであれば、使えなくはないけど 静的解析ではそれを知ることが不可能なので、shellcheckはエラーになる。 あともう一つ、barが異常終了したとき、&& || だと $?はエラーになるが、 ifで書けばfi終了後、$? は正常終了になってるという違いもある。 だからset -eでの挙動が変わる。
917 名前:デフォルトの名無しさん mailto:sage [2019/10/17(木) 17:21:53.83 ID:z1/RyPhF.net] もちろん、&& 単独、もしくは || 単独で 使うならば問題ない。 func && foo とか func || bar ならOK
918 名前:デフォルトの名無しさん mailto:sage [2019/10/17(木) 17:26:43.45 ID:PM8kIYTO.net] 今度は ls "$dir/tmp/*.txt" みたいなことしたらアクセスできませんみたいなことを言われた >>901 なるほど >>902 多分"*.txt"ファイルにアクセスしようとしてできないって言われたことが原因? でもなぜかls *.txtみたいに、ファイル直だとイケる
919 名前:デフォルトの名無しさん mailto:sage [2019/10/17(木) 17:33:24.48 ID:z1/RyPhF.net] あー、やっぱりそうなんや https://en.wikipedia.org/wiki/Getopt https://en.wikipedia.org/wiki/Getopts getoptは1980年頃つくられた。初期のgetoptは低機能 その改良として getopts が1986年にBourne shellに実装されたらしい。 その後、getopts (Solaris) と getopt (GNU) それぞれ違うコマンドで ロングオプションがサポートされ どちらでもないBSD(macOS含む)では、従来どおり 低機能な getopt と それを少し改良した getopts があるが どちらもロングオプションはサポートしてないと
920 名前:デフォルトの名無しさん mailto:sage [2019/10/17(木) 17:37:12.84 ID:z1/RyPhF.net] >>905 だからダブルクォートで括るからいかんのや ls "$dir/tmp/" * ".txt" これが正解(スペースは目立たせるために入れただけ) この書き方ダサいよなw ちなみに古いシェル(poshだっけ?)でこれがうまく行かない バグがあるのだが、まあ誰も気にしないわなw
921 名前: mailto:sage [2019/10/17(Thu) 17:40:52 ID:z1/RyPhF.net] getopts (Solaris) でロングオプションがサポートされたってシェルなんだ?って思ったら、 Solarisでは/usr/bin/getoptsが存在するのか・・・ 紛らわしいな https://docs.oracle.com/cd/E26924_01/html/E29112/getopts-1.html
922 名前: mailto:sage [2019/10/17(Thu) 17:43:27 ID:z1/RyPhF.net] あ、いや /usr/bin/getopts もあるにはあるが、libcのgetopt()実装が拡張されたから それを使ってるBourne Shellでも使えるようになったのか > getopts (Solaris enhanced) > As a result, this new feature was also available in the built-in command getopts of the Bourne Shell.
923 名前: mailto:sage [2019/10/17(Thu) 17:47:11 ID:PM8kIYTO.net] >>907 うおおできた! ls "$dir/tmp/"*".txt" && echo "ok" || echo "ng" みたいな感じにした (txtファイルがひとつもないときエラー出るけど!無視) ?
924 名前:デフォルトの名無しさん [2019/10/17(Thu) 19:06:38 ID:yPX5iNuE.net] ジェルスクリプトってバッドノウハウの塊なんだな…
925 名前:デフォルトの名無しさん mailto:sage [2019/10/17(木) 21:18:21.03 ID:CFrrzXLD.net] TeXで書かれた人工知能みて,「バッドノウハウ」って言ってるみたいw
926 名前:デフォルトの名無しさん mailto:sage [2019/10/17(木) 21:23:39.68 ID:1JFOpLrO.net] GLOB展開と""内での文字列展開は別物で""内での文字列展開にGLOBは含まれないというだけだけどな
927 名前:デフォルトの名無しさん mailto:sage [2019/10/17(木) 22:15:54.16 ID:yIl6cqO6.net] マニュアルにかっちり書いてあるんだけどな 読み解くのは確かに能力が必要だが
928 名前:デフォルトの名無しさん mailto:sage [2019/10/18(金) 00:25:26.47 ID:DhnYyybT.net] >>892-897 find . -type f -name "*.txt" | wc -l -type f は、ファイルのみ。 wc -l は、行数を数える。無ければ、0
929 名前:デフォルトの名無しさん mailto:sage [2019/10/18(金) 00:33:26.40 ID:l6dCA2lX.net] $ mkdir tmp && cd tmp $ touch $'a\nb.txt' $ find . -type f -name '*.txt' | wc -l 2
930 名前: mailto:sage [2019/10/18(Fri) 00:51:30 ID:DhnYyybT.net] 相対パスなら、-path で、カレントディレクトリからの相対パスで指定する find . -type f -path "./test/*.rb" | wc -l
931 名前: mailto:sage [2019/10/18(Fri) 02:59:20 ID:Shj9H2hw.net] なるほろ bash によるオプション解析 - Qiita https://qiita.com/b4b4r07/items/dcd6be0bb9c9185475bb bashのワイルドカード展開は該当するファイルが無いと*が展開されずに残る - Qiita https://qiita.com/anqooqie/items/a2b607fe984ec982fa21 manはマニュアルだがman自体に取説が必要な皮肉 man manを読む時点で骨が折れるからしゃーない
932 名前:915 mailto:sage [2019/10/18(金) 04:58:51.55 ID:DhnYyybT.net] Ruby では、これでカレントディレクトリの該当ファイル数がわかる。 無ければ、0 ruby -e 'puts Dir.glob( "*.txt" ).length'
933 名前: mailto:sage [2019/10/18(Fri) 09:56:55 ID:dNt3vJtH.net] /bin/ls -1d *.txt 2> /dev/null | wc -l
934 名前:デフォルトの名無しさん mailto:sage [2019/10/18(金) 11:02:02.61 ID:lmpJOwiE.net] find使うのは有りだと思うがmaxdepthとquitをつけたほうが良い if test -n "$(find . -maxdepth 1 -name "*.txt" -print -quit)"; then echo "OK" else echo "NG" fi
935 名前: mailto:sage [2019/10/18(Fri) 11:55:18 ID:O8T9zLoM.net] >>921 ただしそれらは POSIX 準拠ではない https://pubs.opengroup.org/onlinepubs/9699919799/utilities/find.html
936 名前:デフォルトの名無しさん [2019/10/18(Fri) 13:39:28 ID:+f5J2l87.net] やっぱりどこでも動くシェルスクリプトなんて幻想なんだね…
937 名前: mailto:sage [2019/10/18(Fri) 14:04:15 ID:e+8RgQym.net] >>918 暇なときに man と bash の man をちゃんと読み込むことをお勧めする 全部理解するのは確かに大変だが、こんな機能があるということだけ 覚えておいて、現実の問題に直面した時に詳細を再検索するのが 実用的。bash だけの問題ではないが。
938 名前:デフォルトの名無しさん mailto:sage [2019/10/18(金) 23:14:29.88 ID:m9M+BHHc.net] bashのmanはメンテされてないんじゃね?
939 名前:デフォルトの名無しさん mailto:sage [2019/10/18(金) 23:19:16.34 ID:1h1F7NR4.net] 日本語版がメンテナンスされてない(もしくは遅い)だけだよ
940 名前:デフォルトの名無しさん mailto:sage [2019/10/19(土) 00:34:03.00 ID:+f1cBD8l.net] 日本語版の記述が少なくて英語版の方だけびっしりとか実にマニュアルらしい
941 名前:デフォルトの名無しさん mailto:sage [2019/10/19(土) 13:26:03.97 ID:9TTj0TwZ.net] 近頃は無料で web 上で使える翻訳ソフトの質も上がっているし 頑張って読んでくれ。
942 名前:デフォルトの名無しさん mailto:sage [2019/10/19(土) 19:06:51.24 ID:VYVT60v2.net] 翻訳めっちゃハッテンしてきてるよね
943 名前:デフォルトの名無しさん mailto:sage [2019/10/19(土) 20:14:11.99 ID:jibveSnU.net] ウホッ じゃなくて なんだ infoとかそっちしかハッテンしてないとかあるじゃん
944 名前:デフォルトの名無しさん mailto:sage [2019/10/20(日) 17:43:31.69 ID:Tm15VeOJ.net] まあ、確かに sed の s コマンドのオプションは man にも入れてほしかった。 オプション使えなくなったのかと思ったじゃないか…
945 名前: mailto:sage [2019/10/20(日) 23:14:32 ID:n5s+FSXq.net] 日本語版だけスカスカと言えばlocate
946 名前:デフォルトの名無しさん mailto:sage [2019/10/21(月) 17:13:45.45 ID:mT54cHzD.net] まあ裏を返せばそれだけ国際標準から離れていないってことよね。 ar.localeとか酷い……
947 名前:デフォルトの名無しさん mailto:sage [2019/10/21(月) 21:16:47 ID:SCSOJkPH.net] あるユーザー(Aとする)が、他のユーザー(Bとする)にのみWrite権限があるファイルを削除するような作業を自動化したいです。 当然そのままでは削除できないので、AからRootに切り替わり、ファイルを削除した後、Rootを抜けてAに戻るというBashスクリプトを作成しようとしています。 AはSudoが実行できない環境で、Expectコマンドもありません。Rootのパスワードはわかっており、平文でシェルスクリプト内に書き込んでも構いません(使用者が数人で、かつ外部に接続できないため。なのでセキュリティの問題は今回は無視)。 このような状態で、どうにか目的を果たすスクリプトはかけますでしょうか。 OSはFedora10、新たにプログラムパッケージ等はインストールできません。 よろしくおねがいします。
948 名前:デフォルトの名無しさん mailto:sage [2019/10/21(月) 21:41:04 ID:aSOXSPh+.net] すなおにrootで全部やれば良いんじゃね?
949 名前:デフォルトの名無しさん mailto:sage [2019/10/21(月) 22:08:16.20 ID:/woRRfjw.net] >>934 そもそもAがファイルを消せるようにパーミッションが初めから設定されるようには出来ないの?
950 名前:デフォルトの名無しさん mailto:sage [2019/10/21(月) 22:24:13 ID:Ol8k0rNq.net] >>934 ファイルを削除するだけの実行ファイルを作ってsetuidビット立てて所有者をBにするとかすればできないかな?
951 名前:デフォルトの名無しさん mailto:sage [2019/10/21(月) 22:25:13 ID:Ol8k0rNq.net] 追記。シェルスクリプト自体にはsetuidは使えない。
952 名前:デフォルトの名無しさん mailto:sage [2019/10/21(月) 22:52:13.48 ID:pvaospDZ.net] Fedora10って10年前のかっ su: must be run from a terminal にならんのだったらsuでいいんじゃないの。パスワード流すのは exec ででも
953 名前:デフォルトの名無しさん mailto:sage [2019/10/22(火) 00:44:01 ID:7OkeLCGH.net] ディレクトリにwが付いてればファイルは消せるけどなあ
954 名前:デフォルトの名無しさん mailto:sage [2019/10/22(火) 02:43:55 ID:T9lP8zyy.net] >>936 パーミッションは変えない方針でいきたいですね >>937 setuidという単語を初めて見たので、のちほど調べてみます。 >>939 su - <<EOF password EOF は試しましたが、ttyを経由しろ的なメッセージで怒られました 調べたところttyなしを許可する設定がsudorsにあるらしいですが、sudoは設定したくないため、できなそうです
955 名前:デフォルトの名無しさん mailto:sage [2019/10/22(火) 09:04:44.04 ID:xSNqVMSD.net] >>941 # mkdir /dir # chown userA:groupA /dir # chmod 700 /dir # cp /bin/rm /dir/rmB # chown userB:groupB /dir/rmB # chmod 6755 /dir/rmB userA $ /dir/rmB /home/userB/file
956 名前:デフォルトの名無しさん mailto:sage [2019/10/22(火) 10:51:03.29 ID:p4xpj08d.net] こんな文字列野中に含まれる数字を ゼロパディングしたいと思います "何とかって講義 第5回 何とか特集.mp3" まずは2桁でそろえてやりたいのですが grep "第[1-9]回" で一桁のものを引っ掛けて 前後をsedで除いて sed "s/.*第//g sed "s/回.*//g" ゼロ埋めはprintfで実現しようと思うのですが printf %02d $times もっとシンプルな方法は無いでしょうか?
957 名前:デフォルトの名無しさん mailto:sage [2019/10/22(火) 10:52:23.81 ID:p4xpj08d.net] なお最終的な文字列の組み立てなおしは 数字の前後も抽出して3つを連結するつもりです
958 名前:デフォルトの名無しさん mailto:sage [2019/10/22(火) 11:04:28.98 ID:+cbyszgy.net] perl5 が使えるなら echo "何とかって講義 第2345回 何とか特集.mp3" | perl -pe 's/第(\d+)回/ sprintf "第%06d回", $1/exm' 何とかって講義 第002345回 何とか特集.mp3
959 名前:デフォルトの名無しさん mailto:sage [2019/10/22(火) 13:09:31.40 ID:QfoZv31s.net] $ echo "何とかって講義 第2345回 何とか特集.mp3" | sed -E 's/第([0-9]+)回/第000000\1回/; s/0*([0-9]{6})/\1/' 6桁揃えにしたければ最初に6個0を足して次に6桁のみ残す $ rename -n 's/\d+/sprintf("%06d",$&)/e' *.mp3 rename utilityが使えるならsprintfが使える
960 名前:デフォルトの名無しさん mailto:sage [2019/10/22(火) 15:10:24.02 ID:W8s8s9Eh.net] perlもrenameもPOSIX規格外
961 名前:デフォルトの名無しさん mailto:sage [2019/10/22(火) 15:18:54.31 ID:AwOtA+WM.net] みんな真偽値ってどうしてる?
962 名前:デフォルトの名無しさん mailto:sage [2019/10/22(火) 15:21:29.60 ID:p4xpj08d.net] >>945-946 ありがとうございます perlは入っており期待通りに動作しました perlの方が高機能なのですが 環境を移したときにperlがあるか保証できないため sedでやろうと思います
963 名前:デフォルトの名無しさん mailto:sage [2019/10/22(火) 15:23:02.88 ID:AwOtA+WM.net] FLAG=true or false ? FLAG=1 or 0 ? FLAG=1 or unset ? FLAG=1 or "" ? それ以外?
964 名前:デフォルトの名無しさん mailto:sage [2019/10/22(火) 20:26:37.95 ID:2f71vpaR.net] alias FLAG true/alias FLAG false if FLAG; then
965 名前:デフォルトの名無しさん mailto:sage [2019/10/22(火) 20:27:08.55 ID:2f71vpaR.net] でもBashだとファイル内では既定で使えない。
966 名前:デフォルトの名無しさん mailto:sage [2019/10/22(火) 21:23:51.15 ID:CciDAIxr.net] >>952 面白いけど、サブシェルの中で変えられないから alias FLAG=true ( alias FLAG=false if FLAG; then echo true fi ) 出力 true
967 名前:デフォルトの名無しさん mailto:sage [2019/10/23(水) 10:43:57.77 ID:oiOUCahJ.net] TRUE=$([ 0 = 0 ];echo $?) FALSE=$([ ! $TRUE ];echo $?) FLAG=$TRUE or $FALSE
968 名前:デフォルトの名無しさん mailto:sage [2019/10/23(水) 10:57:17.22 ID:jQcWWJt3.net] サイトによってrenameの構文が違うけどコマンド自体が違うのな perl付属のprenameとutil-linux付属のrename.ulがあるとか alternativesで書き換えられてるんだからそら気付かんわ
969 名前:デフォルトの名無しさん mailto:sage [2019/10/24(木) 17:48:17.61 ID:mthfJT/n.net] >>953 知らんかった。恥ずかしいw
970 名前:デフォルトの名無しさん mailto:sage [2019/10/24(木) 17:49:17.77 ID:mthfJT/n.net] >>954 それってTRUE=0とするのと何が違うの?
971 名前:デフォルトの名無しさん mailto:sage [2019/10/24(木) 18:07:25.18 ID:lp1ZwQII.net] >>956 サブシェルは関係ない。俺もちゃんと仕様読んだわけじゃないけど、 aliasは実行時じゃなくて、1単位ごとに → パース → 実行 の パース時に変換してる感じ そして1単位というのは、 alias FLAG=true alias FLAG=false; FLAG && echo true ↑これは一行で一単位、だからtrueと表示されてしまうし 関数とか、プロンプトから、func() { 改行 とかやると } 改行 するまで、ずっと行頭に > って表示されるだろ? あれが1単位。だから↓みたいなものもtrueって表示されてしまうんだよ alias FLAG=true func() { alias FLAG=false if FLAG; then echo true fi } func
972 名前:793 [2019/10/24(木) 18:35:35.72 ID:n545jbBX.net] >>795-797 時間が経ってしまいましたが、ありがとうございました "$()"の中の"はエスケープする必要があるのかどうか、とか、変数代入への挙動とか、そういう細かいところがよくわかってなかったです。
973 名前:デフォルトの名無しさん mailto:sage [2019/10/24(木) 22:00:36.73 ID:mthfJT/n.net] >>958 あー。 aliasってたしか一つの構文解析のかなり初期段階で展開される筈だから, その一つの解析対象の内部で定義されているaliasは(当然)それ自身の解析結果には反映されんな。 このへんだろうか?? https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_10
974 名前:デフォルトの名無しさん mailto:sage [2019/10/25(金) 00:11:27.02 ID:6btPTvif.net] 次スレ シェルスクリプト総合 その32 https://mevius.5ch.net/test/read.cgi/tech/1571929725/
975 名前:デフォルトの名無しさん mailto:sage [2019/10/25(金) 07:59:28.70 ID:6Bcci7V7.net] >>957 真は0、偽は0以外という値を意識する必要が無い (Cの真偽値は逆で紛らわしい) true/falseコマンドが使えない環境でも使える
976 名前:デフォルトの名無しさん mailto:sage [2019/10/25(金) 23:17:19.52 ID:TUsRGFSK.net] >>962 true/falseがビルトインじゃないシェルは存在しない また、[ の結果はtrueなら0、falseなら1と決まっている
977 名前:デフォルトの名無しさん mailto:sage [2019/10/26(土) 06:21:32 ID:0I+FrAtF.net] >>963 > true/falseがビルトインじゃないシェルは存在しない 今ならそう言えるだろうが、かつては存在した 外部コマンドのtrue/falseがその名残りだ > また、[ の結果はtrueなら0、falseなら1と決まっている 0は数値の0であってtrueではない trueを表現するのに0を使っているだけだ まあ真偽値を扱うならtrue/falseを使えってことだな
978 名前:デフォルトの名無しさん mailto:sage [2019/10/26(土) 09:53:59.01 ID:Q5pTtErv.net] trueを表現するのに0を使っているというより、真偽に成功不成功をそのまま使ってるというだけだろ
979 名前:デフォルトの名無しさん mailto:sage [2019/10/26(土) 10:32:17.69 ID:a0V3mxKP.net] >>964 > 今ならそう言えるだろうが、かつては存在した かつてとはいつで、どこの実装であるのか答えなさい また、現存しない物の話をしても意味はない そもそも [ が存在しない環境では使えない 外部コマンドの [ がその名残りだ
980 名前:デフォルトの名無しさん mailto:sage [2019/10/26(土) 10:33:01.78 ID:swDBEFOl.net] 成功/不成功は終了ステータスであって真偽値ではない
981 名前:デフォルトの名無しさん mailto:sage [2019/10/26(土) 10:37:22.98 ID:3fttRo5u.net] え、まさか、 hoge && FLAG=$TRUE || FLAG=$FALSE : : if [ "$FLAG" -eq "$TRUE" ] then ・・・ if [ "$FLAG" -eq "$FALSE" ] then ・・・ とか書くつもり・・・?
982 名前:デフォルトの名無しさん mailto:sage [2019/10/26(土) 10:56:36.80 ID:0I+FrAtF.net] >>968 終了ステータスを真偽値で判断するのか 珍しいやつだなw
983 名前:デフォルトの名無しさん mailto:sage [2019/10/26(土) 11:14:58.17 ID:3fttRo5u.net] >>969 変数に真偽値を入れるって話で 終了ステータスを入れる馬鹿を皮肉ってるだけだろw
984 名前:デフォルトの名無しさん mailto:sage [2019/10/26(土) 11:16:54.58 ID:Q5pTtErv.net] while true do や、 FLAG=true or FLAG=false if $FLAG; then 真偽に成功不成功をそのままは、なんて書きたかっただけだろ、そうの方が見た目がいいしな なんでそんなに拘っているんだか
985 名前:デフォルトの名無しさん mailto:sage [2019/10/26(土) 11:21:27.44 ID:3fttRo5u.net] つーか、いいかげんにしろよ。 真偽値の値を何にするかって話だろ 誰も真偽値をどうやって生成するかの話なんかしてねーよ
986 名前:デフォルトの名無しさん mailto:sage [2019/10/26(土) 11:22:36.82 ID:3fttRo5u.net] いつものやつ言っとくわ >>971 /\___/\ / / ヽ ::: \ | (●), 、(●)、 | / ̄ ̄ ̄ ̄ ̄ ̄ ̄ | ,,ノ(、_, )ヽ、,, | < まーたはじまった | ,;‐=‐ヽ .:::::| \_______ \ `ニニ´ .:::/ /`ー‐--‐‐―´´\
987 名前:デフォルトの名無しさん mailto:sage [2019/10/26(土) 11:23:54.27 ID:Q5pTtErv.net] FLAG=true or false FLAG=1 or 0 etc なんでも好きにすればいいだろ true/falseコマンドを使った方が見た目簡潔じゃないかと思うがな、個人的に。使わんけど お前がいいかげんにしろよw
988 名前:デフォルトの名無しさん mailto:sage [2019/10/26(土) 11:29:02.54 ID:3fttRo5u.net] 質問が出てる時点で、意図がわからないコードってことなんだがw 957 名前:デフォルトの名無しさん[sage] 投稿日:2019/10/24(木) 17:49:17.77 ID:mthfJT/n [2/3] >>954 それってTRUE=0とするのと何が違うの? それに>>954 ののコードは、set -eで正しく動かない TRUE=$([ 0 = 0 ];echo $?) FALSE=$([ ! $TRUE ];echo $?) 意図が不明確なコードを書いて、バグを入れるのは アホでしか無いよ
989 名前:デフォルトの名無しさん mailto:sage [2019/10/26(土) 11:32:55.31 ID:Q5pTtErv.net] 俺は他alias使ったのやのその話題は、なにをわざわざ凝ったことしようとしてるのか意図不明で趣味なんだろなとしか思ってない
990 名前:デフォルトの名無しさん [2019/10/26(土) 11:33:38.63 ID:T/HAOzs9.net] やっぱりどこでも動くシェルスクリプトなんて幻想なんだね…
991 名前:デフォルトの名無しさん mailto:sage [2019/10/26(土) 11:34:25.41 ID:3fttRo5u.net] >>976 趣味(実用的ではないネタコード)に、正当っぽい理由をつけるなって話だ
992 名前:デフォルトの名無しさん mailto:sage [2019/10/26(土) 11:36:44.02 ID:Q5pTtErv.net] ただの雑談だろ あれを強制するなりしているわけでもないのに、なにをそう否定してんだか そんなヤツがリアルで一緒に仕事するなら思いっきりくそ叩くがなw
993 名前:デフォルトの名無しさん mailto:sage [2019/10/26(土) 11:37:51.16 ID:3fttRo5u.net] あとC言語の世界しか知らんようだから言っておくと、rubyは0も1もtrueな シェルスクリプトは反対で0がtrueで1がfalseなんだ、それ以外の回答はない!ってのは ちょっと考えが浅いんじゃないですかねぇw osishow3.hateblo.jp/entry/2017/04/20/235500 nil is false false is false 0 is true 1 is true
994 名前:デフォルトの名無しさん mailto:sage [2019/10/26(土) 11:39:18.03 ID:Q5pTtErv.net] 何をひとりで妄想に走っているんだか だれか「いいかげんにしろ」とか言ってなかったか?w
995 名前:デフォルトの名無しさん mailto:sage [2019/10/26(土) 11:42:23.29 ID:3fttRo5u.net] 俺に突っかかってきてないで、シェルスクリプトの話題をしたら?
996 名前:デフォルトの名無しさん mailto:sage [2019/10/26(土) 11:43:40.40 ID:Q5pTtErv.net] よくいうよw
997 名前:デフォルトの名無しさん mailto:sage [2019/10/26(土) 11:47:29.21 ID:3fttRo5u.net] そりゃいうだろ、いきなりシェルスクリプトと関係ない 「俺」の話を始めるんだからw
998 名前:デフォルトの名無しさん mailto:sage [2019/10/26(土) 11:50:09.04 ID:Q5pTtErv.net] 言ったことに対してはそりゃ言うだろう。お前がわざわざ言ったんだから そんなのが無くてもいいのに。お前だった元々のやつを「アホ」呼ばわりしてるじゃん
999 名前:デフォルトの名無しさん mailto:sage [2019/10/26(土) 15:54:12.94 ID:0I+FrAtF.net] >>975 set +e TRUE=$([ 0 = 0 ];echo $?) FALSE=$([ ! $TRUE ];echo $?) set -e 動かんと言ってる方がアホだと思う
1000 名前:デフォルトの名無しさん mailto:sage [2019/10/26(土) 16:04:47.31 ID:+M+pJ73c.net] set -eで正しく動かない ↓ set +eと書いて動くと主張。赤っ恥w
1001 名前:デフォルトの名無しさん mailto:sage [2019/10/26(土) 16:15:33.38 ID:0I+FrAtF.net] 逃げ方がチョン臭くてキモい
1002 名前:デフォルトの名無しさん mailto:sage [2019/10/26(土) 16:17:36.78 ID:+M+pJ73c.net] しかも、最初の状態が set +e だったら set -e に状態が変わってしまうというクソコード 汎用性がない
1003 名前:デフォルトの名無しさん mailto:sage [2019/10/26(土) 16:20:27.41 ID:+M+pJ73c.net] true / false を使えばいいのに、[ が入ってない環境を考慮せずに、 true / false が入ってないかもしれないから [ を使ったと言う無能ぶりw
1004 名前:デフォルトの名無しさん mailto:sage [2019/10/26(土) 16:22:55.60 ID:0I+FrAtF.net] 最初にset -eするとルール化するだけ いちゃもんつけるの得意だな
1005 名前:デフォルトの名無しさん mailto:sage [2019/10/26(土) 16:24:16.70 ID:0I+FrAtF.net] []やtestが使えないシェル教えてくれよ
1006 名前:デフォルトの名無しさん mailto:sage [2019/10/26(土) 16:25:06.04 ID:+M+pJ73c.net] TRUEの反対だからfalseというが、 FALSEの反対もfalseになってると気づいてなくて そもそもシェルスクリプトの仕様をわかってないw [ 0 = 0 ]; echo $? # => 0 [ ! 0 ]; echo $? # => 1 [ ! 1 ]; echo $? # => 1
1007 名前:デフォルトの名無しさん mailto:sage [2019/10/26(土) 16:27:23.30 ID:+M+pJ73c.net] >>992 上の方で /bin/true, /bin/false コマンドがあるんだから true, false が使えないシェルがあるはずだって主張していたぞw その理屈で言えば [ コマンドもあるんだから、 [ が使えないシェルもあるってことになるんだがなw
1008 名前:デフォルトの名無しさん mailto:sage [2019/10/26(土) 16:28:56.67 ID:+M+pJ73c.net] 更に言うなら TRUE=$([ 0 = 0 ];echo $?) FALSE=$([ ! $TRUE ];echo $?) これにサブシェルを使うのもアホらしいw
1009 名前:デフォルトの名無しさん mailto:sage [2019/10/26(土) 16:29:21.39 ID:0I+FrAtF.net] >>994 cshのbuiltin調べてこい 分かったらすいませんって言えよw
1010 名前:デフォルトの名無しさん mailto:sage [2019/10/26(土) 16:29:57.11 ID:+M+pJ73c.net] >>1 みろ csh/tcshでのシェルスクリプトは*まったく推奨しません*。
1011 名前:デフォルトの名無しさん mailto:sage [2019/10/26(土) 16:30:08.87 ID:0I+FrAtF.net] あーいつものマウントとらないと死ぬ病気のやつか おだいじに
1012 名前:デフォルトの名無しさん mailto:sage [2019/10/26(土) 16:30:30.62 ID:+M+pJ73c.net] >>1 じゃなくて>>2 だったな > ・特記なき場合、POSIX 準拠の sh 可換シェルが既定です。(Bourne Shellは既にレガシーです)
1013 名前:デフォルトの名無しさん mailto:sage [2019/10/26(土) 16:30:49.43 ID:+M+pJ73c.net] >>998 マウント取られて可愛そうwww
1014 名前:1001 [Over 1000 Thread.net] このスレッドは1000を超えました。 新しいスレッドを立ててください。 life time: 76日 17時間 12分 59秒
1015 名前:1002 [Over 1000 Thread.net] 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。 運営にご協力お願いいたします。 ─────────────────── 《プレミアム会員の主な特典》 ★ 5ちゃんねる専用ブラウザからの広告除去 ★ 5ちゃんねるの過去ログを取得 ★ 書き込み規制の緩和 ─────────────────── 会員登録には個人情報は一切必要ありません。 月300円から匿名でご購入いただけます。 ▼ プレミアム会員登録はこちら ▼ https://premium.5ch.net/ ▼ 浪人ログイン
1016 名前:はこちら ▼ https://login.5ch.net/login.php [] [ここ壊れてます]
1017 名前:過去ログ ★ [[過去ログ]] ■ このスレッドは過去ログ倉庫に格納されています