シェルスクリプトに関する総合スレッドです。
全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。
・「○○(他の言語)でいいやん」は禁止。他のスレに行ってください。
シェルスクリプト総合 その33
https://mevius.5ch.net/test/read.cgi/tech/1584893550/
シェルスクリプト総合 その34
■ このスレッドは過去ログ倉庫に格納されています
2020/08/21(金) 15:17:55.64ID:mArnj/tT
658デフォルトの名無しさん
2020/10/27(火) 08:25:50.66ID:u8IX9f6Z >>657
シェルスクリプトってまさにこの
「C言語で書いた早くて小さいプログラム」
を組み合わせる為の言語だと思ってる。
もちろんシェルスクリプトの制御機構は計算完備なので
シェルとしての機能だけでプログラムを書くこともできるけど,
Unix哲学≠ノ従うならそれはちょっと違うんじゃないかと思う。
シェルスクリプトで完結する人ってUnix哲学をやたら推すし,
Unix哲学自体は今でもある程度参考になるとは思うけど,
ほんとうにUnixらしいやりかたは
「主処理はC言語で書いて組み合わせはシェル」っていうことだと思う。
シェルスクリプトってまさにこの
「C言語で書いた早くて小さいプログラム」
を組み合わせる為の言語だと思ってる。
もちろんシェルスクリプトの制御機構は計算完備なので
シェルとしての機能だけでプログラムを書くこともできるけど,
Unix哲学≠ノ従うならそれはちょっと違うんじゃないかと思う。
シェルスクリプトで完結する人ってUnix哲学をやたら推すし,
Unix哲学自体は今でもある程度参考になるとは思うけど,
ほんとうにUnixらしいやりかたは
「主処理はC言語で書いて組み合わせはシェル」っていうことだと思う。
659デフォルトの名無しさん
2020/10/27(火) 09:36:02.25ID:NxyNpTjA 自分の中でのシェルスクリプトって
新たにプログラムを位置から作るんじゃなくて
既存のコマンドを使って繋ぎ合わせて
間に合わせのプログラムを作るものだと思ってる
自分はプログラミングできるから普通にプログラム書けるけど
コンパイルとかの煩雑な手順を考えると
シェルスクリプトをぱっと書いてすぐ使えるってのはすごい手軽
パイプ処理が肝かなと思ってる
新たにプログラムを位置から作るんじゃなくて
既存のコマンドを使って繋ぎ合わせて
間に合わせのプログラムを作るものだと思ってる
自分はプログラミングできるから普通にプログラム書けるけど
コンパイルとかの煩雑な手順を考えると
シェルスクリプトをぱっと書いてすぐ使えるってのはすごい手軽
パイプ処理が肝かなと思ってる
660デフォルトの名無しさん
2020/10/27(火) 10:23:30.49ID:nSGvpwuJ >>658
シェルスクリプトをシェルスクリプトで完結する必要はない。
例えば、C言語で作った何かや「awkで作ったなにか」を呼び出すのもあり
それは当然の話だし、否定していない
言いたいことは、それは「awkで作ったなにか」であって
シェルスクリプトではないということだけ
みとめよう。それはawkプログラミングだ
シェルスクリプトをシェルスクリプトで完結する必要はない。
例えば、C言語で作った何かや「awkで作ったなにか」を呼び出すのもあり
それは当然の話だし、否定していない
言いたいことは、それは「awkで作ったなにか」であって
シェルスクリプトではないということだけ
みとめよう。それはawkプログラミングだ
661デフォルトの名無しさん
2020/10/27(火) 10:29:52.20ID:nSGvpwuJ シェルスクリプトで外部コマンドを呼び出すのはありだし
全ての環境で動かすならPOSIX準拠にしろと思うが
POSIX準拠にこだわる必要もない
例えば、dockerやgitはPOSIX準拠ではないコマンドだ
POSIX至上主義かなにかしらんが、シェルスクリプトから
使っていいのはPOSIX準拠コマンドだけだというのなら
dockerやgitすら使えないということになる
んなばかな(笑)
環境が限定される(つまりdockerやgitが入っていること)という前提で
シェルスクリプトでPOSIX準拠ではないコマンドは普通に使う
つまり何が言いたいかと言うと、シェルスクリプトで読みやすさのために長いオプションを使えという話だ
長いオプションはPOSIX準拠ではないからショートオプションを使え?アホか
どちらにしろPOSIX準拠でないコマンドを使うのだ
全ての環境で動かすならPOSIX準拠にしろと思うが
POSIX準拠にこだわる必要もない
例えば、dockerやgitはPOSIX準拠ではないコマンドだ
POSIX至上主義かなにかしらんが、シェルスクリプトから
使っていいのはPOSIX準拠コマンドだけだというのなら
dockerやgitすら使えないということになる
んなばかな(笑)
環境が限定される(つまりdockerやgitが入っていること)という前提で
シェルスクリプトでPOSIX準拠ではないコマンドは普通に使う
つまり何が言いたいかと言うと、シェルスクリプトで読みやすさのために長いオプションを使えという話だ
長いオプションはPOSIX準拠ではないからショートオプションを使え?アホか
どちらにしろPOSIX準拠でないコマンドを使うのだ
662デフォルトの名無しさん
2020/10/27(火) 11:22:58.65ID:B6tDM1Ic663デフォルトの名無しさん
2020/10/27(火) 11:36:52.21ID:nSGvpwuJ "既存プログラム"を組み合わせるのはUnixらしいが
新しいコマンドを作って組み合わせて使うユニケージはUnixらしくない
しかもそのコマンドが完全に特殊用途向けのコマンドであり
Unixでいうシェルスクリプトにはまったくもって応用できない
今、ユニケージ開発手法にギークが熱狂するワケ【USP研究所代表&オープンソースOSコミッター対談】
【PR】2020.09.25
https://type.jp/et/feature/14070/
はは、クソ開発手法だ。ギークのだーれも熱狂してねーよ
せめてマニアとかオタクとかいえ、ギークと言ったら海外用語だ
海外に進出してないユニケージが熱狂とか嘘作んじゃねーよ
新しいコマンドを作って組み合わせて使うユニケージはUnixらしくない
しかもそのコマンドが完全に特殊用途向けのコマンドであり
Unixでいうシェルスクリプトにはまったくもって応用できない
今、ユニケージ開発手法にギークが熱狂するワケ【USP研究所代表&オープンソースOSコミッター対談】
【PR】2020.09.25
https://type.jp/et/feature/14070/
はは、クソ開発手法だ。ギークのだーれも熱狂してねーよ
せめてマニアとかオタクとかいえ、ギークと言ったら海外用語だ
海外に進出してないユニケージが熱狂とか嘘作んじゃねーよ
664デフォルトの名無しさん
2020/10/27(火) 12:20:04.79ID:IzIv2i9p Power-Shell は unix らしさの極みか?
漏れはそうは思わんが
漏れはそうは思わんが
665デフォルトの名無しさん
2020/10/27(火) 12:30:26.45ID:eXfPuMud Power-Shell は反Unixだろ
そもそもWindowsにはまともなコマンドがないから
コマンドの連携ということがしづらい
あっても、正常終了時に「処理が完了しました」とかでて連携ができない
あれはコマンドを連携させずに、ただ並べるだけ
そういう世界だからシェルだけ改良しても意味がない
Unixでいうコマンド相当のものが必要
それが.NET framework。しかし.NET frameworkはAPI
APIだから普段CLIから実行するものではないし
コマンドとして使うのは面倒
Power-Shellはシェルスクリプトとしての特徴と
メリットである簡潔さが失われた「普通の言語」に相当する
そもそもWindowsにはまともなコマンドがないから
コマンドの連携ということがしづらい
あっても、正常終了時に「処理が完了しました」とかでて連携ができない
あれはコマンドを連携させずに、ただ並べるだけ
そういう世界だからシェルだけ改良しても意味がない
Unixでいうコマンド相当のものが必要
それが.NET framework。しかし.NET frameworkはAPI
APIだから普段CLIから実行するものではないし
コマンドとして使うのは面倒
Power-Shellはシェルスクリプトとしての特徴と
メリットである簡潔さが失われた「普通の言語」に相当する
666デフォルトの名無しさん
2020/10/27(火) 18:52:31.21ID:B6tDM1Ic >>665
PowerShellを使ったことがないだろ?w
ヘンにハイフンを入れたりしてるしな。
コマンドによってはちゃんとオブジェクトを返すし、パイプで処理することもできる。
.NETを直接実行することもできるし、テキストベースでしかないUnixシェルよりも使いやすいこともある。
「反Unix」というよりは、それを越えたところもあるWindowsらしいシェルと言える。
ただ、いつまでどのようにサポートされるのか、最近はちょっと不安。。。
poshとのかねあいとか。
PowerShellを使ったことがないだろ?w
ヘンにハイフンを入れたりしてるしな。
コマンドによってはちゃんとオブジェクトを返すし、パイプで処理することもできる。
.NETを直接実行することもできるし、テキストベースでしかないUnixシェルよりも使いやすいこともある。
「反Unix」というよりは、それを越えたところもあるWindowsらしいシェルと言える。
ただ、いつまでどのようにサポートされるのか、最近はちょっと不安。。。
poshとのかねあいとか。
667デフォルトの名無しさん
2020/10/27(火) 18:54:44.28ID:a7WAgl/q フィルターは、Ruby で作る
Linux のPowerShell は、Azure しか使われていないだろ?
Linux のPowerShell は、Azure しか使われていないだろ?
668デフォルトの名無しさん
2020/10/27(火) 20:43:43.48ID:gFMGawtc669デフォルトの名無しさん
2020/10/27(火) 22:01:39.01ID:7WqSRFWS スペースがあると誤解しているのと、スペースをハイフンに置き換える習慣があるジジイの命名
670デフォルトの名無しさん
2020/10/27(火) 22:32:46.87ID:B6tDM1Ic671デフォルトの名無しさん
2020/10/28(水) 02:15:01.01ID:TQndZTJN >>670
PowerShellで作ったプログラムをオプソで公開してるがなにか?
PowerShellで作ったプログラムをオプソで公開してるがなにか?
672デフォルトの名無しさん
2020/10/28(水) 06:49:20.54ID:Df2NTJPb オプソってなに?
673デフォルトの名無しさん
2020/10/28(水) 08:15:00.68ID:zcWN9+mU Open source
674デフォルトの名無しさん
2020/10/28(水) 13:27:15.30ID:l3R5yM/w675デフォルトの名無しさん
2020/10/28(水) 17:48:34.37ID:QWPlcBUD これだけマルチコアになった今日び、コマンドの方も対応して欲しい気がする。
ファイル圧縮のコマンドとか、マルチスレッドで処理したら速くできるはず。
あるいはどこまでもマルチプロセス主義でいくというなら... 例えば並列パイプ? というか
今のパイプだとデータフローが一本道だがこれを並列に分散して走らせて最後データを
一本にまとめるような処理の仕組みがあってもいいのではないかと。
ちなみに一本道は「いっぽんみち」で「いっぽんどう」ではないからな、って聞いてないか
ファイル圧縮のコマンドとか、マルチスレッドで処理したら速くできるはず。
あるいはどこまでもマルチプロセス主義でいくというなら... 例えば並列パイプ? というか
今のパイプだとデータフローが一本道だがこれを並列に分散して走らせて最後データを
一本にまとめるような処理の仕組みがあってもいいのではないかと。
ちなみに一本道は「いっぽんみち」で「いっぽんどう」ではないからな、って聞いてないか
676デフォルトの名無しさん
2020/10/28(水) 19:10:42.29ID:Aw3ALjki 例えるならxargs
677デフォルトの名無しさん
2020/10/28(水) 19:52:02.68ID:vhMFXsQD パイプで繋げば自動でマルチになるではないか
678デフォルトの名無しさん
2020/10/28(水) 20:17:48.21ID:FddMFcrq あまりわかってなさそだな>>675は
並列パイプとかも簡単に言ってそう
並列パイプとかも簡単に言ってそう
679デフォルトの名無しさん
2020/10/28(水) 20:18:18.79ID:NAroBJuS 最期に一本にまとめるというのならGNU parallelやろ?
バックグラウンドプロセスを使って自分でまとめてもいいが
バックグラウンドプロセスを使って自分でまとめてもいいが
680デフォルトの名無しさん
2020/10/28(水) 20:22:18.78ID:zcWN9+mU パイプって元々非同期処理(これはPOSIXで規定)だから,
実装によっては普通にマルチスレッドで処理してんじゃないの?
実装によっては普通にマルチスレッドで処理してんじゃないの?
681デフォルトの名無しさん
2020/10/28(水) 20:22:22.24ID:58wSuA1P そもそもUnixにはforkというコマンドがあってだな
682デフォルトの名無しさん
2020/10/28(水) 20:23:15.77ID:XBU5yUok ターミナルを2枚開いてマルチプロセス!
683デフォルトの名無しさん
2020/10/28(水) 20:32:27.18ID:NAroBJuS 多くの言語が並列処理を行うように明示的に書かなければ並列処理されないのに比べて
シェルスクリプトは普通に書いてもかってに並列処理が行われる言語の1つ
シェルスクリプトは普通に書いてもかってに並列処理が行われる言語の1つ
684デフォルトの名無しさん
2020/10/28(水) 21:19:48.83ID:zcWN9+mU685デフォルトの名無しさん
2020/10/28(水) 21:48:39.39ID:K6dD4VVC >>683,684
お前らもプロセスとスレッドの違いがわかってないようだがな
お前らもプロセスとスレッドの違いがわかってないようだがな
686デフォルトの名無しさん
2020/10/28(水) 22:22:18.44ID:1fF6N90I >>685
わかってるが、何を根拠にいちゃもんつけたの?w
わかってるが、何を根拠にいちゃもんつけたの?w
687デフォルトの名無しさん
2020/10/28(水) 22:37:57.46ID:K6dD4VVC お前はどっちなの?
まだ ID:NAroBJuS ならそうわかってはないようでもあるが、ID:zcWN9+mU は明らかにわかってないなw
まだ ID:NAroBJuS ならそうわかってはないようでもあるが、ID:zcWN9+mU は明らかにわかってないなw
688デフォルトの名無しさん
2020/10/28(水) 22:42:56.15ID:1fF6N90I 質問を質問で返すな
まずお前が根拠をいえ
言わないで質問する理由なんかないだろ
まずお前が根拠をいえ
言わないで質問する理由なんかないだろ
689デフォルトの名無しさん
2020/10/28(水) 22:43:30.54ID:l3R5yM/w まあ、>>680の「マルチスレッド」はおかしいな。
言うなら「マルチタスク」とかやろ。
言うなら「マルチタスク」とかやろ。
690デフォルトの名無しさん
2020/10/28(水) 22:45:28.30ID:K6dD4VVC どっちなのかも言えないのか。後者だろなな
691デフォルトの名無しさん
2020/10/28(水) 22:47:04.72ID:1fF6N90I 前者だが?はい、言いましたーw
次はお前の番だが、ここまでやっておいて
お前は答えられないってことはないよな
次はお前の番だが、ここまでやっておいて
お前は答えられないってことはないよな
692デフォルトの名無しさん
2020/10/28(水) 22:54:11.38ID:K6dD4VVC693デフォルトの名無しさん
2020/10/28(水) 22:56:23.42ID:1fF6N90I >>692
誰が同じことを繰り返し言えって言った?
> 「多くの言語が並列処理を行うように明示的に書かなければ並列処理されない」なんてわざわざ書くのはあんまわかってなさそうだなってとこ
の理由を書けといったんだが?
誰が同じことを繰り返し言えって言った?
> 「多くの言語が並列処理を行うように明示的に書かなければ並列処理されない」なんてわざわざ書くのはあんまわかってなさそうだなってとこ
の理由を書けといったんだが?
694デフォルトの名無しさん
2020/10/28(水) 22:57:50.86ID:K6dD4VVC 書いたぞ。読まないのは知らないぞ
695デフォルトの名無しさん
2020/10/28(水) 22:59:25.60ID:1fF6N90I 書いたというのなら、引用できるはずだなw
新しい言葉を追加せずに、理由を引用してみろ
新しい言葉を追加せずに、理由を引用してみろ
696デフォルトの名無しさん
2020/10/28(水) 23:01:45.79ID:K6dD4VVC 読む気なさそうだからなあw
すでに書いた後は知らない
すでに書いた後は知らない
697デフォルトの名無しさん
2020/10/28(水) 23:03:01.34ID:X2c0ql0Z な?引用できなかった。
698デフォルトの名無しさん
2020/10/29(木) 08:36:16.60ID:D7f8M1As 「こいつ分かってない」って言葉ってほんとうに便利よね。
それだけで
・自分が分かっている人間≠セと暗示できる
(でもあくまで暗示だから言質を取られる恐れもないw)
・相手より上の立場に立つ(という錯覚が)できる
わけだからさ。
それだけで
・自分が分かっている人間≠セと暗示できる
(でもあくまで暗示だから言質を取られる恐れもないw)
・相手より上の立場に立つ(という錯覚が)できる
わけだからさ。
699デフォルトの名無しさん
2020/10/29(木) 08:43:02.83ID:D7f8M1As ていうかシェルスクリプトで簡単にできるのは「マルチタスク」であって,
マルチタスクというのは非同期的な処理だから「非同期処理が簡単にできる」
という言説は正しいと言えるのかも知れないが(それでも違和感がある),
普通「マルチスレッド」といったときの同一プロセス内での複数スレッド処理に関しては
そもそもCPUの機能を全部抽象化されてるようなシェルスクリプトでは
外部コマンドを使ったりしないと実現できんのでは。
もしかしたら俺が知らんだけで
POSIXかどっかで「この動作はマルチ*スレッド*で処理されますよ」
というのが規定されている可能性もあるが,
ちょっと考えにくい。
マルチタスクというのは非同期的な処理だから「非同期処理が簡単にできる」
という言説は正しいと言えるのかも知れないが(それでも違和感がある),
普通「マルチスレッド」といったときの同一プロセス内での複数スレッド処理に関しては
そもそもCPUの機能を全部抽象化されてるようなシェルスクリプトでは
外部コマンドを使ったりしないと実現できんのでは。
もしかしたら俺が知らんだけで
POSIXかどっかで「この動作はマルチ*スレッド*で処理されますよ」
というのが規定されている可能性もあるが,
ちょっと考えにくい。
700デフォルトの名無しさん
2020/10/29(木) 10:29:24.34ID:YCEy/zhh シェルの内部コマンドでマルチスレッド化したほうが効率的なら勝手にやりゃいいんじゃねーの?
具体的にどのコマンドを対応させたいの?
もう誰か作ってんじゃないの?
具体的にどのコマンドを対応させたいの?
もう誰か作ってんじゃないの?
701デフォルトの名無しさん
2020/10/29(木) 10:45:18.65ID:XkZMBg2d >同一プロセス内での複数スレッド処理に関しては
>そもそもCPUの機能を全部抽象化されてるようなシェルスクリプトでは
>外部コマンドを使ったりしないと実現できんのでは
何を言いたいのかイミフ
複数のスレッドで作業を分割して同時並行で実行するが、終了は順番に受け取るとかめんどくさいだとかで普通にできるだろう。単にやる必要もないってとこだな
>POSIXかどっかで「この動作はマルチ*スレッド*で処理されますよ」
>というのが規定されている可能性もあるが,
>ちょっと考えにくい。
なんか純粋なUnix系のOSを理解してないっぽい。純粋部分はマルチスレッドはOSで「勝手に」はやらんだろう。CUIレベルだと必要なさげだからな。GUIなOSでは勝手にはあるけど
>そもそもCPUの機能を全部抽象化されてるようなシェルスクリプトでは
>外部コマンドを使ったりしないと実現できんのでは
何を言いたいのかイミフ
複数のスレッドで作業を分割して同時並行で実行するが、終了は順番に受け取るとかめんどくさいだとかで普通にできるだろう。単にやる必要もないってとこだな
>POSIXかどっかで「この動作はマルチ*スレッド*で処理されますよ」
>というのが規定されている可能性もあるが,
>ちょっと考えにくい。
なんか純粋なUnix系のOSを理解してないっぽい。純粋部分はマルチスレッドはOSで「勝手に」はやらんだろう。CUIレベルだと必要なさげだからな。GUIなOSでは勝手にはあるけど
702デフォルトの名無しさん
2020/10/29(木) 10:55:31.90ID:yfEeCvlS シェルスクリプトはHaskellと同じで自動的にマルチスレッド化するプログラミング
言語ですよ!
素晴らしいですよ!
ってこと?
言語ですよ!
素晴らしいですよ!
ってこと?
703デフォルトの名無しさん
2020/10/29(木) 10:57:33.10ID:XkZMBg2d >>700
イミフな部分は シェルの内部コマンド をマルチスレッドでという話か
内部コマンドっても単にコマンドを内包してるだけで、外部コマンドと変わらない(いや、変わらないと困る)もんだろと思ってるから、そういう読みはできなかった。なるほどね
ksh,zsh でも確かマルチスレッドではなかったような
i=0
command | while read j; do
i=$((i+j))
done
って、i がちゃんと変わるようにしてるのに(確かネストしても大丈夫だったような)。実現方法はなんだっけ
イミフな部分は シェルの内部コマンド をマルチスレッドでという話か
内部コマンドっても単にコマンドを内包してるだけで、外部コマンドと変わらない(いや、変わらないと困る)もんだろと思ってるから、そういう読みはできなかった。なるほどね
ksh,zsh でも確かマルチスレッドではなかったような
i=0
command | while read j; do
i=$((i+j))
done
って、i がちゃんと変わるようにしてるのに(確かネストしても大丈夫だったような)。実現方法はなんだっけ
704デフォルトの名無しさん
2020/10/29(木) 10:59:39.85ID:XkZMBg2d705デフォルトの名無しさん
2020/10/29(木) 11:25:48.02ID:yfEeCvlS でも、自動的にマルチスレッド化してC言語の64倍高速化する可能性も、ワンチャンあるって事ですよね?
試してみるバリューあるのでは?
試してみるバリューあるのでは?
706デフォルトの名無しさん
2020/10/29(木) 11:31:36.93ID:XkZMBg2d ないよw
C言語でもOpenMP使えば割と見た目簡単にできそうだが、OpenMPもそれほど流行ってない
プロセス=特に何か意識する必要もない
スレッド=常時何かを意識する必要がある
そう簡単な話ではない
Haskellとかはマルチスレッドでなきゃそもそも実現できない言語なのだからそれと比べても意味はないな。Haskell出したのはそう意味あるわけではないだろけど
C言語でもOpenMP使えば割と見た目簡単にできそうだが、OpenMPもそれほど流行ってない
プロセス=特に何か意識する必要もない
スレッド=常時何かを意識する必要がある
そう簡単な話ではない
Haskellとかはマルチスレッドでなきゃそもそも実現できない言語なのだからそれと比べても意味はないな。Haskell出したのはそう意味あるわけではないだろけど
707デフォルトの名無しさん
2020/10/29(木) 11:38:39.55ID:XkZMBg2d >そもそも実現できない言語なのだから
というわけでもないのね
出し受けがどでかいばかりじゃないからそりゃそうか
というわけでもないのね
出し受けがどでかいばかりじゃないからそりゃそうか
708デフォルトの名無しさん
2020/10/29(木) 11:49:45.20ID:yfEeCvlS シェルスクリプトがマルチ高速化のアビリティを持つのは否定しようがないファクトですよね?
709デフォルトの名無しさん
2020/10/29(木) 11:59:44.96ID:XkZMBg2d 小池とかのギャグに走ってるだけだろ
710デフォルトの名無しさん
2020/10/29(木) 15:03:10.28ID:8VEYobTG711デフォルトの名無しさん
2020/10/29(木) 15:45:57.37ID:i0HZBLVS 自己紹介がお上手
712デフォルトの名無しさん
2020/10/29(木) 22:21:37.37ID:87BKVwTm 並行・並列とプロセス・OSスレッド・軽量スレッドと同期・非同期の切り分けがごっちゃになってそう知らんけど
713デフォルトの名無しさん
2020/10/29(木) 22:49:07.55ID:yfEeCvlS バリューないですか?
714デフォルトの名無しさん
2020/10/29(木) 22:51:15.28ID:Ju4cpcAY 並行と並列はいまだにうまく使い分けられていない印象
正確な定義はどこかにあるんだろうが、人によって使われ方が違う
正確な定義はどこかにあるんだろうが、人によって使われ方が違う
715デフォルトの名無しさん
2020/10/29(木) 22:55:56.32ID:yfEeCvlS コンカレントとパラレルの違いはアジア人にはわかり辛いですからね。
キリスト教的考え方が普及していないからですね。
キリスト教的考え方が普及していないからですね。
716デフォルトの名無しさん
2020/10/29(木) 23:59:18.90ID:N/u/fZ2Q 並行と並列は使ってるCPUで決まる。
プログラムの書き方に違いはない。
プログラムの書き方に違いはない。
717デフォルトの名無しさん
2020/10/30(金) 17:02:49.47ID:ig1/qwB5 $@みたいな擬配列変数に格納されている値 一つ一つに対して
何か処理を行なう時に,別の変数を用意しない(使わない)方法って原理的に可能かな。
普通は
for args in $@; do
なにか処理
done
というスクリプトを組むと思うんだけど,
argsみたいな変数を使わずに済む方法があれば知りたい。
(シェルスクリプトは基本的には変数の無駄遣いを避けなきゃいけないので。
まあそれが「欠陥」かどうかは別として)
何か処理を行なう時に,別の変数を用意しない(使わない)方法って原理的に可能かな。
普通は
for args in $@; do
なにか処理
done
というスクリプトを組むと思うんだけど,
argsみたいな変数を使わずに済む方法があれば知りたい。
(シェルスクリプトは基本的には変数の無駄遣いを避けなきゃいけないので。
まあそれが「欠陥」かどうかは別として)
718デフォルトの名無しさん
2020/10/30(金) 17:39:03.81ID:mooUMZ8S なう
719デフォルトの名無しさん
2020/10/30(金) 18:20:41.07ID:vW0P/VrR PowerShellってKshとかPerlとかUnixのシェルやスクリプト言語を研究してベースにして作ったって、昔QuoraかどこかでMSの社員が答えてた
begin/endブロックとか、昔からUnix使ってればそのまま活かせる知識かなりある
begin/endブロックとか、昔からUnix使ってればそのまま活かせる知識かなりある
720デフォルトの名無しさん
2020/10/30(金) 18:25:55.93ID:sXVsY8+M721デフォルトの名無しさん
2020/10/30(金) 18:26:25.00ID:sXVsY8+M 他にも再起でできる
723デフォルトの名無しさん
2020/10/30(金) 18:30:51.05ID:sXVsY8+M > (シェルスクリプトは基本的には変数の無駄遣いを避けなきゃいけないので。
これはなんで? 変数名がぶつかるとかいう話?
これはなんで? 変数名がぶつかるとかいう話?
724デフォルトの名無しさん
2020/10/30(金) 18:33:22.92ID:sXVsY8+M ちなみにそれダブルクォートがあったほうがいい
for args in "$@"; do
なにか処理
done
もしくは逆に省略
for args; do
なにか処理
done
for args in "$@"; do
なにか処理
done
もしくは逆に省略
for args; do
なにか処理
done
725デフォルトの名無しさん
2020/10/30(金) 18:39:10.50ID:sXVsY8+M ちなみにそれダブルクォートがあったほうがいい
for args in "$@"; do
もしくは逆に省略
for args; do
for args in "$@"; do
もしくは逆に省略
for args; do
726デフォルトの名無しさん
2020/10/30(金) 18:39:31.11ID:sXVsY8+M 書き込みエラった
727717
2020/10/30(金) 19:07:22.75ID:ig1/qwB5 >>723
そういうことです。
Bashとかの独自機能に頼れば
局所変数を使えるみたいだけど
それを踏まえても,
例えばC言語よりは「変数の使い過ぎ」には
注意しなくちゃならない(よね?)
>>725
for文ってin省略したら$@を暗示するのマジか!
知らんかったけどちゃんとPOSIXでも規定されてたわ。
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_09_04_03
そういうことです。
Bashとかの独自機能に頼れば
局所変数を使えるみたいだけど
それを踏まえても,
例えばC言語よりは「変数の使い過ぎ」には
注意しなくちゃならない(よね?)
>>725
for文ってin省略したら$@を暗示するのマジか!
知らんかったけどちゃんとPOSIXでも規定されてたわ。
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_09_04_03
728デフォルトの名無しさん
2020/10/30(金) 19:15:49.74ID:sXVsY8+M > for文ってin省略したら$@を暗示するのマジか!
他にはgetoptsもそうだな。こっちは逆によく省略されるから
逆に指定できたのか!になると思うが
今は解決してるかもしれないが、$@が0個の時、
set -u状態で"$@"を参照するとエラーになるシェルがあったから
for args in "$@" じゃなくて省略してfor argsと書くようになった
他にはgetoptsもそうだな。こっちは逆によく省略されるから
逆に指定できたのか!になると思うが
今は解決してるかもしれないが、$@が0個の時、
set -u状態で"$@"を参照するとエラーになるシェルがあったから
for args in "$@" じゃなくて省略してfor argsと書くようになった
729デフォルトの名無しさん
2020/10/30(金) 19:32:14.84ID:yPjXBzu5 >>719
実際、PerlとBashに慣れてると、かなり書きやすいからな。
実際、PerlとBashに慣れてると、かなり書きやすいからな。
730デフォルトの名無しさん
2020/11/01(日) 17:25:31.39ID:xiHRYmfR 昔Perlやってて関数の$1とかいちいち変数に入れるのダサいよなぁと思っていたけど
シェルスクリプトをPOSIX縛りしてたらローカル変数なくて、そのまま$1とかでいいやって思ってたら
どうせ関数は小さく書くのは当たり前だから別に$1とかで問題ないと思うようになったな
外部からどういう引数で渡ってくるのか分かりづらいものはコメント書いてるけど
シェルスクリプトをPOSIX縛りしてたらローカル変数なくて、そのまま$1とかでいいやって思ってたら
どうせ関数は小さく書くのは当たり前だから別に$1とかで問題ないと思うようになったな
外部からどういう引数で渡ってくるのか分かりづらいものはコメント書いてるけど
731デフォルトの名無しさん
2020/11/01(日) 18:51:46.05ID:CuITjVo7 つきつめるとアセンブリで問題ないになる
732デフォルトの名無しさん
2020/11/01(日) 19:28:12.68ID:xiHRYmfR そうはならないよ。アセンブリは短く書こうとしてもどうしても長くなるから
「どうせ関数は小さく書くのは当たり前」が実現できない
「どうせ関数は小さく書くのは当たり前」が実現できない
733デフォルトの名無しさん
2020/11/01(日) 21:18:05.45ID:HWQKX8bn 名前の話なら、昔は名前が長いだけで容量が取られるから短くしていただけで、いまとなっては短いメリットはあまりない。
734デフォルトの名無しさん
2020/11/02(月) 10:41:13.59ID:n2BNqgKx たいてい編集するときに補完してくれるしね。
735デフォルトの名無しさん
2020/11/02(月) 11:22:36.19ID:n2BNqgKx poshを「POSIXシェルスクリプトがちゃんと動くか」というのを
確かめるのに使ってる人いる?
シェルスクリプトの妥当性をshellcheckみたいに静的じゃなく動的に検証したい。
確かめるのに使ってる人いる?
シェルスクリプトの妥当性をshellcheckみたいに静的じゃなく動的に検証したい。
736デフォルトの名無しさん
2020/11/02(月) 12:43:28.28ID:WhiKrslV737デフォルトの名無しさん
2020/11/02(月) 13:09:30.56ID:FhHZncje >>735
poshはバグが大量にある古いpdkshのフォークで
ろくにメンテナンスされてないので今も大量にバグが有る
https://bugs.debian.org/cgi-bin/pkgreport.cgi?pkg=posh
poshはバグが大量にある古いpdkshのフォークで
ろくにメンテナンスされてないので今も大量にバグが有る
https://bugs.debian.org/cgi-bin/pkgreport.cgi?pkg=posh
738デフォルトの名無しさん
2020/11/02(月) 13:11:03.65ID:FhHZncje POSIX準拠してるかを調べたいならdashを使ったほうが何倍もマシ
739デフォルトの名無しさん
2020/11/02(月) 13:26:39.74ID:n2BNqgKx >>738
dashね。thx
dashね。thx
740デフォルトの名無しさん
2020/11/02(月) 13:28:36.85ID:ew0mgVfp741デフォルトの名無しさん
2020/11/02(月) 13:28:58.41ID:lTcfprDV dash dash dash
742デフォルトの名無しさん
2020/11/02(月) 16:38:46.09ID:FhHZncje シェルスクリプトも最後のコマンドの評価結果をそのまま返す
743デフォルトの名無しさん
2020/11/02(月) 16:39:37.65ID:FhHZncje744デフォルトの名無しさん
2020/11/02(月) 16:42:40.40ID:UfGVYnOo いまどきのシェルスクリプトはほとんど/bin/bashでしょ
745デフォルトの名無しさん
2020/11/02(月) 16:56:54.34ID:pNDhR5km シバンに使われるのは/bin/shだろ?
そしてそれがDebian・Ubuntuだとdashになる
なぜ今どきはbashだと思ったのか?
そしてそれがDebian・Ubuntuだとdashになる
なぜ今どきはbashだと思ったのか?
746デフォルトの名無しさん
2020/11/02(月) 17:08:07.37ID:UfGVYnOo 初めはそうだったんだけどな
ディストリによっては/bin/shが/bin/bashなのでそれと気づかずbash拡張を使う奴が出てきて、debianやbsd等の/bin/shが/bin/bashじゃない環境じゃ動かなくなってきて
「bash拡張使ったスクリプトはshebangもちゃんと/bin/bashにしよう」ってなってきた
ディストリによっては/bin/shが/bin/bashなのでそれと気づかずbash拡張を使う奴が出てきて、debianやbsd等の/bin/shが/bin/bashじゃない環境じゃ動かなくなってきて
「bash拡張使ったスクリプトはshebangもちゃんと/bin/bashにしよう」ってなってきた
747デフォルトの名無しさん
2020/11/02(月) 17:14:14.89ID:pNDhR5km その結果bashが入ってないAlpine Linuxで動かないという問題が発生するわけで
さっさとPOSIX準拠に変更したほうがいい。bash依存は甘え。
っていうか俺勉強したくないんだーと言って必要もないのに/bin/bashにして
動かなくて後悔してるやつが増えてきてる。自業自得だが。
さっさとPOSIX準拠に変更したほうがいい。bash依存は甘え。
っていうか俺勉強したくないんだーと言って必要もないのに/bin/bashにして
動かなくて後悔してるやつが増えてきてる。自業自得だが。
748デフォルトの名無しさん
2020/11/02(月) 17:15:01.41ID:pNDhR5km シェルスクリプトはPOSIX準拠にしておけ
bash特有の機能を使いたくなったら別の言語を使うべきだ
bash特有の機能を使いたくなったら別の言語を使うべきだ
749デフォルトの名無しさん
2020/11/02(月) 17:17:28.98ID:ZpVsHyOp macのデフォルトシェルはzsh
750デフォルトの名無しさん
2020/11/02(月) 17:21:10.82ID:pNDhR5km macの/bin/shはbash
751デフォルトの名無しさん
2020/11/02(月) 17:23:00.46ID:ZpVsHyOp macの/bin/shはzsh
752デフォルトの名無しさん
2020/11/02(月) 17:23:45.79ID:pNDhR5km >>751
すぐバレる嘘を付くな
すぐバレる嘘を付くな
753デフォルトの名無しさん
2020/11/02(月) 17:24:32.82ID:pNDhR5km そもそも>>2に書いてある
・デフォルトシェルのシバンはBourneシェル時代からの伝統で#!/bin/shを使用します。ただしその実体はOSによって様々です
Debian系 … dash CentOS系 … bash Alpine … ash(busybox) Android … mksh
FreeBSD … ash Solaris,OpenBSD … ksh
macOS … bash(Single UNIX Specification準拠のために一部動作が異なる)
・ログインシェルは/bin/shでない場合があります。例 macOS … zsh
・デフォルトシェルのシバンはBourneシェル時代からの伝統で#!/bin/shを使用します。ただしその実体はOSによって様々です
Debian系 … dash CentOS系 … bash Alpine … ash(busybox) Android … mksh
FreeBSD … ash Solaris,OpenBSD … ksh
macOS … bash(Single UNIX Specification準拠のために一部動作が異なる)
・ログインシェルは/bin/shでない場合があります。例 macOS … zsh
754デフォルトの名無しさん
2020/11/02(月) 17:30:22.78ID:Xv3pPvZM tcsh : 思い出してください
755デフォルトの名無しさん
2020/11/02(月) 17:49:15.11ID:ew0mgVfp756デフォルトの名無しさん
2020/11/02(月) 18:35:32.48ID:pNDhR5km なんでbash使うんですか?bashじゃないとダメなことでもやってるんですか?
757デフォルトの名無しさん
2020/11/02(月) 18:52:50.96ID:j60yzXh/ 自分のためのスクリプトなので書きやすいように書くだけ
758デフォルトの名無しさん
2020/11/02(月) 18:54:08.71ID:pNDhR5km だからbashのどういうところが書きやすいの?
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 舛添要一「日本は亡国への道をひた走り」「相対的国力は中国が増大し日本が低下している」 [冬月記者★]
- 従来の健康保険証、12月1日に期限切れ マイナ利用率は37% [蚤の市★]
- 【物価高対策】「おこめ券を配布しません」大阪府交野の市長が明言「経費率が高い」「今高い米をムリして…」 [1ゲットロボ★]
- 【公明党】派遣型風俗店の女性の裸をスマホで盗撮か 徳島県議会議員の古川広志容疑者逮捕 警視庁 ★2 [nita★]
- 【地方】「もうヤメとけ、また移住者様が帰っちゃうぞ」田舎の「いじめ体質」★3 [七波羅探題★]
- 【あれ?】訪日自粛どこ吹く風 中国からどっと2000人 金沢港に今年最後のクルーズ船 [nita★]
- 【DAZN】フォーミュラGP【F1 2 3 SF P】Lap1813
- 海豚専 2025年 Part18
- 【U-NEXT】プレミアリーグ総合 ★37
- 巨専】 ★3
- こいせん 全レス転載禁止
- とらせん IP
- 昔って日本人の価値は低かったけど日本円の価値が高かったから海外旅行に行けたし好きなだけ買い物も出来たんだよね [817148728]
- ドラッグストアにオナホが売ってるんだが [793187428]
- 池上彰「海外のメディアは政府に遠慮せず批判するが、政治家はそれを受け入れ、怒ったり弾圧したりしない。」高市さん? [834922174]
- 朝勃ち久しぶりにしたんだがwwwwwwwwwwwwwwwwwwwwwwwwwwww
- 結婚式でディープキス(舌入れ)したらアカンの?
- 日本コンテンツを弾圧しまくる中国に対して「戦略的互恵関係を推進」と言っている売国政治家が見つかる。助けて高市総理大臣 [469534301]
