!extend:on:vvvvv:1000:512
!extend:on:vvvvv:1000:512
シェルスクリプトに関する総合スレッドです。
スレ立て時は以下の文を先頭行に加えて下さい。
後のつけ忘れ防止の為に複数行重ねて追加推奨
!extend:on:vvvvv:1000:512
全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。
前スレ
シェルスクリプト総合 その28
http://mevius.5ch.net/test/read.cgi/tech/1532397676/
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
探検
シェルスクリプト総合 その29
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 3efb-m2E0)
2018/09/22(土) 11:53:21.38ID:BBiLRgnj099デフォルトの名無しさん (ワッチョイ 5764-u1F+)
2018/09/28(金) 10:45:59.06ID:TLhVFQk50 ファイルのメディアタイプを取得する汎用な方法ってあるかな。
自作してもいいんだけどできれば既存のものを利用したい。
file(1)コマンドの-iオプションがまず思い付いたんだけど,これは
GNU/Linux(http://man7.org/linux/man-pages/man1/file.1.html)
FreeBSD(https://www.freebsd.org/cgi/man.cgi?query=file&sektion=1)
ではメディアタイプで出力するとあるのに対し
本家POSIX(http://pubs.opengroup.org/onlinepubs/9699919799/utilities/file.html)
Solaris(https://docs.oracle.com/cd/E26502_01/html/E29030/file-1.html)
AIX(https://www.ibm.com/support/knowledgecenter/en/ssw_aix_72/com.ibm.aix.cmds2/file.htm)
なんかでは特になんの指定もなし……。
メディアタイプなんてド標準なんだから,しっかり規定しておいてほしかったなぁ。
POSIX 2017あたりでさ。
自作してもいいんだけどできれば既存のものを利用したい。
file(1)コマンドの-iオプションがまず思い付いたんだけど,これは
GNU/Linux(http://man7.org/linux/man-pages/man1/file.1.html)
FreeBSD(https://www.freebsd.org/cgi/man.cgi?query=file&sektion=1)
ではメディアタイプで出力するとあるのに対し
本家POSIX(http://pubs.opengroup.org/onlinepubs/9699919799/utilities/file.html)
Solaris(https://docs.oracle.com/cd/E26502_01/html/E29030/file-1.html)
AIX(https://www.ibm.com/support/knowledgecenter/en/ssw_aix_72/com.ibm.aix.cmds2/file.htm)
なんかでは特になんの指定もなし……。
メディアタイプなんてド標準なんだから,しっかり規定しておいてほしかったなぁ。
POSIX 2017あたりでさ。
100デフォルトの名無しさん (ワッチョイ 9f98-aemA)
2018/09/28(金) 13:07:01.59ID:bPXaydqo0 >>99
メディアタイプの種類自体は標準化されていたとしても、
あるファイルがどのメディアタイプかってのは決まらないでしょ?
拡張子cgiのスクリプトファイルだって、ソースコード配布サイトなら
テキストファイル扱いにしたいだろうし
メディアタイプの種類自体は標準化されていたとしても、
あるファイルがどのメディアタイプかってのは決まらないでしょ?
拡張子cgiのスクリプトファイルだって、ソースコード配布サイトなら
テキストファイル扱いにしたいだろうし
101デフォルトの名無しさん (ワッチョイ 1798-aemA)
2018/09/29(土) 13:10:10.20ID:d3Gl2lPg0 特別な意味をもたせた終了コードをなんにしようかな?って考えてるんだけど
既存で使われてる終了コードとなるべくかぶらせたくない。
どんなのがあるか知らない?
1, 2, 126, 127, 255(bashの予約)
0〜63(fsckで使用)
64〜78(sysexits ユーザー用のうち定義済みのもの)
128〜192(シグナルコードの範囲?)
参考
https://ja.wikipedia.org/wiki/%E7%B5%82%E4%BA%86%E3%82%B9%E3%83%86%E3%83%BC%E3%82%BF%E3%82%B9
https://linuxjm.osdn.jp/html/LDP_man-pages/man7/signal.7.html
https://linuxjm.osdn.jp/html/e2fsprogs/man8/fsck.8.html
http://kaworu.jpn.org/doc/FreeBSD/jman/man3/sysexits.3.php
http://tldp.org/LDP/abs/html/exitcodes.html
一番最後のリンクでsysexitsの作者は64〜113をユーザー用に使うことを提案してるみたいだけど
定義済みを除けば残りは79〜113かな
既存で使われてる終了コードとなるべくかぶらせたくない。
どんなのがあるか知らない?
1, 2, 126, 127, 255(bashの予約)
0〜63(fsckで使用)
64〜78(sysexits ユーザー用のうち定義済みのもの)
128〜192(シグナルコードの範囲?)
参考
https://ja.wikipedia.org/wiki/%E7%B5%82%E4%BA%86%E3%82%B9%E3%83%86%E3%83%BC%E3%82%BF%E3%82%B9
https://linuxjm.osdn.jp/html/LDP_man-pages/man7/signal.7.html
https://linuxjm.osdn.jp/html/e2fsprogs/man8/fsck.8.html
http://kaworu.jpn.org/doc/FreeBSD/jman/man3/sysexits.3.php
http://tldp.org/LDP/abs/html/exitcodes.html
一番最後のリンクでsysexitsの作者は64〜113をユーザー用に使うことを提案してるみたいだけど
定義済みを除けば残りは79〜113かな
102デフォルトの名無しさん (ワッチョイ 5780-q1nr)
2018/09/29(土) 13:18:50.90ID:IuTgmxg/0 オツムに欠陥があるヤツでなければ
普通に別の環境変数にいれる
普通に別の環境変数にいれる
103デフォルトの名無しさん (ワッチョイ 5764-u1F+)
2018/09/29(土) 14:08:42.53ID:PPHj/b7C0104デフォルトの名無しさん (ワッチョイ 1798-aemA)
2018/09/29(土) 15:12:55.62ID:d3Gl2lPg0 >>103
そう言われるかなとは思ったw
「俺の作ったプログラム」 ==> 「俺の作ったフィルタ」 ==> 「任意のプログラム」
という呼び出しの流れで
「俺の作ったプログラム」 で「任意のプログラム」 の終了コードを知りたいが、
「俺の作ったフィルタ」 独自の終了コードだけは特別扱いしたいということ
「任意のプログラム」のエラーは想定外のエラーで
「俺の作ったフィルタ」のエラーは想定されたエラーで
どちらもエラーではあるんだけど「俺の作ったプログラム」で表示するメッセージが違う
それぐらいなので、かぶってしまっても大きな問題は発生しないんだけどね
そう言われるかなとは思ったw
「俺の作ったプログラム」 ==> 「俺の作ったフィルタ」 ==> 「任意のプログラム」
という呼び出しの流れで
「俺の作ったプログラム」 で「任意のプログラム」 の終了コードを知りたいが、
「俺の作ったフィルタ」 独自の終了コードだけは特別扱いしたいということ
「任意のプログラム」のエラーは想定外のエラーで
「俺の作ったフィルタ」のエラーは想定されたエラーで
どちらもエラーではあるんだけど「俺の作ったプログラム」で表示するメッセージが違う
それぐらいなので、かぶってしまっても大きな問題は発生しないんだけどね
105デフォルトの名無しさん (ワッチョイ 5764-u1F+)
2018/09/29(土) 17:52:02.97ID:PPHj/b7C0 >>104
なるほど。
たしかにそういう目的ならば,終了コードが混ざる≠フはよくないな。
しかし例えばapt(1)は非root権限でシステム操作しようとすると
exit 100を返すというトンデモ仕様[Debian 2015]なので,もうどうしようもないんじゃねw
せっかくsysexitに権限異常を示す77があるのにどうして100番を使ってしまったのか……。
[Debian 2015]: https://manpages.debian.org/stretch/apt/apt.8.ja.html#%E8%A8%BA%E6%96%AD%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8
なるほど。
たしかにそういう目的ならば,終了コードが混ざる≠フはよくないな。
しかし例えばapt(1)は非root権限でシステム操作しようとすると
exit 100を返すというトンデモ仕様[Debian 2015]なので,もうどうしようもないんじゃねw
せっかくsysexitに権限異常を示す77があるのにどうして100番を使ってしまったのか……。
[Debian 2015]: https://manpages.debian.org/stretch/apt/apt.8.ja.html#%E8%A8%BA%E6%96%AD%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8
106デフォルトの名無しさん (ワッチョイ 5764-u1F+)
2018/09/29(土) 17:54:32.38ID:PPHj/b7C0 ああ,なんか説明不足で投稿しちゃった。
つまりさ,一応標準で定められたエラー番号はあるものの,
各種アプリケーションが従っている訳でもなく
Debian系のaptコマンドのような超大手のアプリケーションでさえ標準を無視してるんだから,
> 定義済みを除けば残りは79〜113かな
↑こういうのは考えないほうがいいんじゃない? ってこと。
つまりさ,一応標準で定められたエラー番号はあるものの,
各種アプリケーションが従っている訳でもなく
Debian系のaptコマンドのような超大手のアプリケーションでさえ標準を無視してるんだから,
> 定義済みを除けば残りは79〜113かな
↑こういうのは考えないほうがいいんじゃない? ってこと。
107デフォルトの名無しさん (ワッチョイ 1798-aemA)
2018/09/29(土) 18:22:23.04ID:d3Gl2lPg0 >>105-106
どこかのなにかにかぶってしまうのは防ぎようがないけど
よく使われるコマンドがこんな終了コードを使っていたっていう事例を知りたいのよ
fsckとかどう見てもエラーじゃねーだろコレっていうのが
エラーあつかいになってて以前はハマったことあるしw
https://linuxjm.osdn.jp/html/e2fsprogs/man8/fsck.8.html
> 1 - ファイルシステムのエラーが修正された
どこかのなにかにかぶってしまうのは防ぎようがないけど
よく使われるコマンドがこんな終了コードを使っていたっていう事例を知りたいのよ
fsckとかどう見てもエラーじゃねーだろコレっていうのが
エラーあつかいになってて以前はハマったことあるしw
https://linuxjm.osdn.jp/html/e2fsprogs/man8/fsck.8.html
> 1 - ファイルシステムのエラーが修正された
108デフォルトの名無しさん (ワッチョイ 1798-aemA)
2018/09/29(土) 18:23:25.37ID:d3Gl2lPg0 標準に準拠したいとかそういう話ではなく
単にぶつかりたくないだけ
単にぶつかりたくないだけ
109デフォルトの名無しさん (ワッチョイ 1798-aemA)
2018/09/29(土) 18:24:45.45ID:d3Gl2lPg0 > exit 100を返すというトンデモ仕様[Debian 2015]なので,もうどうしようもないんじゃねw
実を言うと今100を使おうとしていたw
やはり裏の裏の裏の裏ぐらいを読まないとダメだなw
実を言うと今100を使おうとしていたw
やはり裏の裏の裏の裏ぐらいを読まないとダメだなw
110デフォルトの名無しさん (ワッチョイ 5764-u1F+)
2018/09/29(土) 18:40:55.97ID:PPHj/b7C0 非0の返り値だけどコマンドは成功しているっていう例として有名なのはdiff(1)とかかな。
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/diff.html#tag_20_34_14
>1
> Differences were found.
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/diff.html#tag_20_34_14
>1
> Differences were found.
111デフォルトの名無しさん (ワッチョイ 9f5d-+h8b)
2018/09/29(土) 18:46:56.62ID:8M0IW2fy0 シグナルでも使ってみたらどうだろうか。
あるいは別にパイプを用意するとか。
あるいは別にパイプを用意するとか。
112デフォルトの名無しさん (ワッチョイ bf9f-MYrK)
2018/09/30(日) 02:44:50.58ID:KPqVv5wd0 絶対にぶつからないようにするには別の方法でエラーを伝えるようにするぐらいしか方法ないんじゃないか?
同じ値になる可能性のあるものをどちらから発生したかわからない状態で同じ所から得るなんてやはり無理があるだろう。
同じ値になる可能性のあるものをどちらから発生したかわからない状態で同じ所から得るなんてやはり無理があるだろう。
113デフォルトの名無しさん (ワッチョイ 1798-aemA)
2018/10/01(月) 01:15:09.47ID:2Ehpmx/A0 こんな書き方できたのか
a=1
case $a in
( 1 ) echo ok
esac
a=1
case $a in
( 1 ) echo ok
esac
114デフォルトの名無しさん (ワッチョイ bf9f-aemA)
2018/10/01(月) 02:02:45.71ID:IEGoOL+v0 お、おう
115デフォルトの名無しさん (ワッチョイ 1798-aemA)
2018/10/02(火) 19:23:29.52ID:6qOrAQgQ0 お題
ある関数に対して、apple orange banana ... とN個(Nは任意の個数)の引数を渡した時、
以下のような、引数とその引数のインデックス番号を出力する関数を作成せよ
(単語に対して数値が対応しているわけではない)
apple 1
orange 2
banana 3
:
ただし、外部コマンド、拡張POSIX機能、変数の使用は禁止とする
(ここでいう変数とはsetコマンドで表示されるもののことである)
ある関数に対して、apple orange banana ... とN個(Nは任意の個数)の引数を渡した時、
以下のような、引数とその引数のインデックス番号を出力する関数を作成せよ
(単語に対して数値が対応しているわけではない)
apple 1
orange 2
banana 3
:
ただし、外部コマンド、拡張POSIX機能、変数の使用は禁止とする
(ここでいう変数とはsetコマンドで表示されるもののことである)
116デフォルトの名無しさん (ワッチョイ 5764-u1F+)
2018/10/02(火) 21:27:13.63ID:yoF3UpeG0117デフォルトの名無しさん (ワッチョイ 5764-u1F+)
2018/10/02(火) 21:45:46.37ID:yoF3UpeG0 おいこら答えてやったんだからなんとか言えよコラ
エレガントすぎて腰が抜けたか?wwwww
まあ実際,自分で言うのもなんだけどかなり最良に近い方法じゃないかしら。
・POSIX.1-2017準拠
・空白などを含む引数も直感的に指定可能("word with space")
・単純 構造が簡単
・数値の増加にexpr(1)ではなく算術式を利用している為速い
エレガントすぎて腰が抜けたか?wwwww
まあ実際,自分で言うのもなんだけどかなり最良に近い方法じゃないかしら。
・POSIX.1-2017準拠
・空白などを含む引数も直感的に指定可能("word with space")
・単純 構造が簡単
・数値の増加にexpr(1)ではなく算術式を利用している為速い
118デフォルトの名無しさん (ワッチョイ 1723-sl6K)
2018/10/02(火) 22:03:54.77ID:kkfm+1S90 変数禁止だから不正解じゃない?
119デフォルトの名無しさん (ワッチョイ bf3b-c77k)
2018/10/02(火) 22:15:20.79ID:xDUI5Isc0120デフォルトの名無しさん (アウアウカー Saab-HGqR)
2018/10/02(火) 23:00:16.05ID:xTxFBCr4a 最初の一個だけならスマートだったのに
褒められたがりが
褒められたがりが
121デフォルトの名無しさん (ワッチョイ 5764-u1F+)
2018/10/03(水) 00:30:44.79ID:ej0n10jM0 煽りだよ だって明らかに学校の課題かなにかでしょ。
そんなのに真面目に付き合うほど俺は素直じゃない。
そんなのに真面目に付き合うほど俺は素直じゃない。
122デフォルトの名無しさん (ワッチョイ bf3b-c77k)
2018/10/03(水) 00:44:57.49ID:m57KKa9e0 苦しすぎな言い訳w
123デフォルトの名無しさん (ワッチョイ 5764-u1F+)
2018/10/03(水) 01:48:10.18ID:ej0n10jM0 まあそう思っとけw
124デフォルトの名無しさん (ワッチョイ bf9f-aemA)
2018/10/03(水) 01:59:13.13ID:jikKostS0 >>115
echo は使っては駄目? 拡張されていない sh だと echo はビルトインではなく /usr/bin/echo だと思うが。
echo は使っては駄目? 拡張されていない sh だと echo はビルトインではなく /usr/bin/echo だと思うが。
125デフォルトの名無しさん (ワッチョイ 1798-aemA)
2018/10/03(水) 02:01:17.96ID:NkO7phbc0126デフォルトの名無しさん (ワッチョイ 1798-aemA)
2018/10/03(水) 02:03:27.25ID:NkO7phbc0127デフォルトの名無しさん (ワッチョイ 1798-aemA)
2018/10/03(水) 02:14:54.02ID:NkO7phbc0 そうか。evalとか外部コマンドは実装不可能なものを除いて
ビルトインで実装することなんて決まりはないのか
では外部コマンドの定義を「現存するシェルでビルトインで実装されたことがないもの」にしよう
オレオレシェル作ってビルトインするのは問題の意図から外れるので、
現存する(誰もが容易に入手可能な)いずれかのシェルで
ビルトインされているならば使って良いものとする
ビルトインで実装することなんて決まりはないのか
では外部コマンドの定義を「現存するシェルでビルトインで実装されたことがないもの」にしよう
オレオレシェル作ってビルトインするのは問題の意図から外れるので、
現存する(誰もが容易に入手可能な)いずれかのシェルで
ビルトインされているならば使って良いものとする
128デフォルトの名無しさん (ワッチョイ 1798-aemA)
2018/10/03(水) 02:18:56.23ID:NkO7phbc0 あと拡張POSIX機能も使用してOKにしよう。
それを実現する裏技みたいなのがあったら嫌だなと思って入れたが、
もしそれでできるなら俺も勉強になるし。
ようするにPATH環境変数を空にして、どれかのシェルで動けばOKってことだな
条件がグダグダになってしまったw
それを実現する裏技みたいなのがあったら嫌だなと思って入れたが、
もしそれでできるなら俺も勉強になるし。
ようするにPATH環境変数を空にして、どれかのシェルで動けばOKってことだな
条件がグダグダになってしまったw
129デフォルトの名無しさん (アウアウカー Saab-XaUO)
2018/10/03(水) 12:27:47.15ID:61GCF4dla if や while を外部コマンド動かさずに使うには [ がビルトインのシェルでないとダメだな。
昔の sh は [ が test コマンドへのシンボリックリンクで外部コマンドだったし。
今でもその名残で /bin または /usr/bin に [ が入ってるよな。
昔の sh は [ が test コマンドへのシンボリックリンクで外部コマンドだったし。
今でもその名残で /bin または /usr/bin に [ が入ってるよな。
130デフォルトの名無しさん (ワッチョイ 1798-aemA)
2018/10/03(水) 13:43:00.79ID:NkO7phbc0 別件で現在主要のシェルで何がビルトインか調べたことがあるよ
. : [ break cd command continue echo eval exec exit export false kill pwd
read readonly return set shift test times trap true umask unset wait
これらは全てのシェルで使えると言っていいだろう
poshはログインシェルとしては使わないもの扱いなのか
alias bg fg type ulimitが削除されている。(typeないとか地味につらい)
busyboxはgetoptsがないみたい
意外だったのはprintfがビルトインでないシェルがmkshとposhの2つもあったこと。
しかも両方共echoでエスケープシーケンスを解釈してくれるから文字をそのまま出力できない。
mkshの方はset -o posixでエスケープシーケンスを無効にできるしビルトインのprintで代用できるんだが
poshは調べた限りビルトインコマンドでそのまま出力する方法がない
. : [ break cd command continue echo eval exec exit export false kill pwd
read readonly return set shift test times trap true umask unset wait
これらは全てのシェルで使えると言っていいだろう
poshはログインシェルとしては使わないもの扱いなのか
alias bg fg type ulimitが削除されている。(typeないとか地味につらい)
busyboxはgetoptsがないみたい
意外だったのはprintfがビルトインでないシェルがmkshとposhの2つもあったこと。
しかも両方共echoでエスケープシーケンスを解釈してくれるから文字をそのまま出力できない。
mkshの方はset -o posixでエスケープシーケンスを無効にできるしビルトインのprintで代用できるんだが
poshは調べた限りビルトインコマンドでそのまま出力する方法がない
131デフォルトの名無しさん (ワッチョイ bf3b-c77k)
2018/10/03(水) 13:47:38.74ID:m57KKa9e0 いいから、お題の参考答えを出しなさいw
オレオレ定義が曖昧すぎでお題になってないから、もういいでしょ
オレオレ定義が曖昧すぎでお題になってないから、もういいでしょ
132デフォルトの名無しさん (ワッチョイ 1798-aemA)
2018/10/03(水) 13:57:02.54ID:NkO7phbc0 >>131
問題訂正してやるから、もう少し頑張れやw
お題
ある関数に対して、apple orange banana ... とN個(Nは任意の個数)の引数を渡した時、
以下のような、引数とその引数のインデックス番号を出力する関数を作成せよ
(単語に対して数値が対応しているわけではない)
apple 1
orange 2
banana 3
:
ただし、変数の使用は禁止とし、シェル機能とビルトインコマンドのみを用いること
(ここでいう変数とはsetコマンドで表示されるもののことである)
(使用するコマンドはいずれかのシェルのビルトインコマンドであればよいが、
この問題用に独自シェルを作成するのは禁止とする)
問題訂正してやるから、もう少し頑張れやw
お題
ある関数に対して、apple orange banana ... とN個(Nは任意の個数)の引数を渡した時、
以下のような、引数とその引数のインデックス番号を出力する関数を作成せよ
(単語に対して数値が対応しているわけではない)
apple 1
orange 2
banana 3
:
ただし、変数の使用は禁止とし、シェル機能とビルトインコマンドのみを用いること
(ここでいう変数とはsetコマンドで表示されるもののことである)
(使用するコマンドはいずれかのシェルのビルトインコマンドであればよいが、
この問題用に独自シェルを作成するのは禁止とする)
133デフォルトの名無しさん (ワッチョイ bf3b-c77k)
2018/10/03(水) 13:59:49.96ID:m57KKa9e0 なんの目的かさっぱりわからんな。自分でできてんの?っていう疑問からなんだけどなw
>変数の使用は禁止とし
>(ここでいう変数とはsetコマンドで表示されるもののことである)
環境変数のことを言っているのかと思えば違うし、これだけでも曖昧というかオレオレ定義が曖昧だろう
>変数の使用は禁止とし
>(ここでいう変数とはsetコマンドで表示されるもののことである)
環境変数のことを言っているのかと思えば違うし、これだけでも曖昧というかオレオレ定義が曖昧だろう
134デフォルトの名無しさん (ワッチョイ 1798-aemA)
2018/10/03(水) 14:11:05.97ID:NkO7phbc0135デフォルトの名無しさん (ワッチョイ 1798-aemA)
2018/10/03(水) 14:13:32.35ID:NkO7phbc0 今日の24時までに答えが出なければヒント出しますw
136デフォルトの名無しさん (ワッチョイ f723-LrZ5)
2018/10/03(水) 14:16:57.73ID:6m7pNgyW0 そのヒントとやらもグダグダなんでしょw
137デフォルトの名無しさん (ワッチョイ bf3b-c77k)
2018/10/03(水) 14:17:05.40ID:m57KKa9e0 変数を使わない 言語(マシン語すら) は知らんなあ。そういう縛りを設けての目的はなんなん?
やってみたできるけど、クソのようなwにしかならんから、どうか、参考の答えを出してw
やってみたできるけど、クソのようなwにしかならんから、どうか、参考の答えを出してw
138デフォルトの名無しさん (ワッチョイ 1798-aemA)
2018/10/03(水) 14:19:23.20ID:NkO7phbc0 答えは明日。まあヒントみれば気づく人はすぐわかるでしょう。
コロンブスの卵だよ
コロンブスの卵だよ
139デフォルトの名無しさん (ワッチョイ bf3b-c77k)
2018/10/03(水) 14:20:30.02ID:m57KKa9e0 なんで常時上から目線なのかw コードで語ればいいのに
素晴らしいコードならそんなおれおれ上から目線しなくてもいいくらいなのに。なんかしらんがもったいつけてのまだ「ヒント」とかもったいつけてるしw
素晴らしいコードならそんなおれおれ上から目線しなくてもいいくらいなのに。なんかしらんがもったいつけてのまだ「ヒント」とかもったいつけてるしw
140デフォルトの名無しさん (ワッチョイ bf3b-c77k)
2018/10/03(水) 14:21:39.64ID:m57KKa9e0 なんかしらんが見つけて、俺すげーしたいだけっぽいなw
141デフォルトの名無しさん (ワッチョイ 1798-aemA)
2018/10/03(水) 14:22:11.11ID:NkO7phbc0 > そういう縛りを設けての目的はなんなん?
その理由も答えと一緒に明かします
その理由も答えと一緒に明かします
142デフォルトの名無しさん (ワッチョイ bf3b-c77k)
2018/10/03(水) 14:23:23.18ID:m57KKa9e0 いや、もういらんわw なんかキモすぎて付き合いきれないw
143デフォルトの名無しさん (ワッチョイ 5764-u1F+)
2018/10/03(水) 14:36:43.15ID:ej0n10jM0 多分だけど学校の課題だと予想
根拠は二点:
1. 問題が実利的でない。学校(それもあまり学力の高くない)にありがちな「こんなのできるかな?」系の問題である。
2. 煽ったらそれに乗っかって答えを出してくれる人が思ってるという点で質問者が精神的に幼ない。(高校生くらいか?)
根拠は二点:
1. 問題が実利的でない。学校(それもあまり学力の高くない)にありがちな「こんなのできるかな?」系の問題である。
2. 煽ったらそれに乗っかって答えを出してくれる人が思ってるという点で質問者が精神的に幼ない。(高校生くらいか?)
144デフォルトの名無しさん (ワッチョイ bf3b-c77k)
2018/10/03(水) 14:45:22.66ID:m57KKa9e0 posh とかいつもの人でしょ
いつもの人が学校の課題をしなきゃならん人なのか知らんけどw
いつもの人が学校の課題をしなきゃならん人なのか知らんけどw
145デフォルトの名無しさん (ワッチョイ 5764-u1F+)
2018/10/03(水) 15:06:30.08ID:ej0n10jM0 poshなんていうシェルがあるのね。初耳だわ。
146デフォルトの名無しさん (ワッチョイ 1798-aemA)
2018/10/03(水) 15:10:04.24ID:NkO7phbc0 >>2に書いてあるよ。俺もここ(の何スレか前)で初めて知った
147デフォルトの名無しさん (アウアウカー Saab-XaUO)
2018/10/03(水) 15:58:50.21ID:4kFnpcnsa $# と shift を使って逆順に値を付加することは簡単にできたんだがな。
148デフォルトの名無しさん (ワッチョイ 1798-aemA)
2018/10/03(水) 17:25:26.25ID:NkO7phbc0149デフォルトの名無しさん (ワッチョイ 9fb3-lCNR)
2018/10/03(水) 21:20:26.89ID:SM8JpmZX0 ちょっと前にもこんなグダグダ無かったっけ?
150デフォルトの名無しさん (アウウィフ FFdb-LSDD)
2018/10/03(水) 21:48:53.18ID:Tma5IQlaF 変数使ってはダメって、非合理的でない?
シェルの仕様否定してどーするの?
外部コマンドだって、それがUNIXの設計思想なんだからそれさえも否定するってのも理解不能
ならば、OSそのものを仮想的なものを仮定して
その上で動かすとでもしないと
大昔の情報処理技術者試験用に作られたアセンブラみたいな感じでさ
変数使わない、外部コマンド使用禁止、そんなアルゴリズムが何の役に立つんだろう?
シェルの仕様否定してどーするの?
外部コマンドだって、それがUNIXの設計思想なんだからそれさえも否定するってのも理解不能
ならば、OSそのものを仮想的なものを仮定して
その上で動かすとでもしないと
大昔の情報処理技術者試験用に作られたアセンブラみたいな感じでさ
変数使わない、外部コマンド使用禁止、そんなアルゴリズムが何の役に立つんだろう?
151デフォルトの名無しさん (ワッチョイ 5764-u1F+)
2018/10/03(水) 22:35:14.41ID:ej0n10jM0 でも前はワッチョイやIDがなかったから もっと酷かった。
今はNGすればオッケー☆
今はNGすればオッケー☆
152デフォルトの名無しさん (ワッチョイ 1e98-vBoO)
2018/10/04(木) 00:37:38.01ID:8ua9ZMtc0 ヒント忘れてたわw
func() {
*********
while [ $# -gt 1 ]; do
*********
shift
done
}
func apple orange banana
********の所は1行とは限りません
func() {
*********
while [ $# -gt 1 ]; do
*********
shift
done
}
func apple orange banana
********の所は1行とは限りません
153デフォルトの名無しさん (ワッチョイ 1e98-vBoO)
2018/10/04(木) 00:41:45.65ID:8ua9ZMtc0154デフォルトの名無しさん (ワッチョイ 1e98-vBoO)
2018/10/04(木) 00:43:44.36ID:8ua9ZMtc0155デフォルトの名無しさん (ワッチョイ 1e98-vBoO)
2018/10/04(木) 00:46:12.13ID:8ua9ZMtc0156デフォルトの名無しさん (ワッチョイ effb-v2gR)
2018/10/04(木) 00:49:17.75ID:C6pwZkBD0 いきなりレス数増えたと思ったらもう木曜か
157デフォルトの名無しさん (ワッチョイ b064-selW)
2018/10/04(木) 04:55:02.39ID:/YMF27MO0 >>152よ、お前のなかでは「$#」は変数じゃないのか……。
人様にクイズとやらを出す前にシェルとはなんなのかを学んだらどうだ?
人様にクイズとやらを出す前にシェルとはなんなのかを学んだらどうだ?
158デフォルトの名無しさん (ワッチョイ 1e98-vBoO)
2018/10/04(木) 05:43:44.35ID:8ua9ZMtc0 出題ぐらいちゃんと読もうぜw
> ただし、変数の使用は禁止とし、シェル機能とビルトインコマンドのみを用いること
> (ここでいう変数とはsetコマンドで表示されるもののことである)
> ただし、変数の使用は禁止とし、シェル機能とビルトインコマンドのみを用いること
> (ここでいう変数とはsetコマンドで表示されるもののことである)
159デフォルトの名無しさん (ワッチョイ b064-selW)
2018/10/04(木) 08:51:53.43ID:/YMF27MO0 bash 4.2以降はset組み込みコマンドの中に$#が含まれるようになったんだよなぁ…
ちゃんと調べて、どうぞ。
ちゃんと調べて、どうぞ。
160デフォルトの名無しさん (ワッチョイ 1e98-vBoO)
2018/10/04(木) 09:17:07.53ID:8ua9ZMtc0 ないですね。ちゃんと調べてどうぞ
foo() { set | grep '#='; }; foo
$ bash --version
GNU bash, バージョン 4.4.19(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2016 Free Software Foundation, Inc.
ライセンス GPLv3+: GNU GPL バージョン 3 またはそれ以降 <http://gnu.org/licenses/gpl.html>
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
foo() { set | grep '#='; }; foo
$ bash --version
GNU bash, バージョン 4.4.19(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2016 Free Software Foundation, Inc.
ライセンス GPLv3+: GNU GPL バージョン 3 またはそれ以降 <http://gnu.org/licenses/gpl.html>
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
161デフォルトの名無しさん (アウアウカー Sa0a-iYeS)
2018/10/04(木) 09:50:29.05ID:8DudSISka >>160
grap のパターンはそれでいいのか?
grap のパターンはそれでいいのか?
162デフォルトの名無しさん (ワッチョイ 1e98-vBoO)
2018/10/04(木) 10:01:44.50ID:8ua9ZMtc0163デフォルトの名無しさん (アウアウカー Sa0a-iYeS)
2018/10/04(木) 10:47:30.53ID:8DudSISka ああ。そうか。最初の$は要らないからそれでいいのか。
164デフォルトの名無しさん (ワッチョイ deb3-GavF)
2018/10/04(木) 14:55:58.09ID:7ib5/eAS0 grap コマンドか、なんか強うそうなイメージ
165デフォルトの名無しさん (ワッチョイ b064-selW)
2018/10/04(木) 16:22:52.78ID:/YMF27MO0 なんかもう誰かが作ってそうだよね。
まるでyaから始まる4文字のソフトウェアが被りまくってるように。
まるでyaから始まる4文字のソフトウェアが被りまくってるように。
166デフォルトの名無しさん (ワッチョイ 1e98-kArq)
2018/10/04(木) 16:55:15.20ID:8ua9ZMtc0 犯人はya
167デフォルトの名無しさん (ワッチョイ 1e98-kArq)
2018/10/04(木) 20:00:19.77ID:8ua9ZMtc0 正解者もいないようなのででは解答
このコードがどういうときに有用かは>>153で書いたとおり
set は使わなくても別にもう一つ関数を作れば同じことができるが
関数を作らずとも引数の再設定という方法がある。意外と便利だよ
func() {
set -- "$@" $(($#+2))
while [ $# -gt 1 ]; do
eval "echo \"$1 \$((\$$#-$#))\""
shift
done
}
func apple orange banana
このコードがどういうときに有用かは>>153で書いたとおり
set は使わなくても別にもう一つ関数を作れば同じことができるが
関数を作らずとも引数の再設定という方法がある。意外と便利だよ
func() {
set -- "$@" $(($#+2))
while [ $# -gt 1 ]; do
eval "echo \"$1 \$((\$$#-$#))\""
shift
done
}
func apple orange banana
168デフォルトの名無しさん (ワッチョイ ae3b-Nzta)
2018/10/04(木) 20:11:54.69ID:n5lIiyiD0 そんなクソなコードを意気揚々としてあげてるけどさ、なんか変数被るからというもっともらしい言い訳してたけど、なるべく変数使わないように書くわけだ、これから。ほーっw。そんなのクソだな、個人的にw
なんでそういうお題をそんな俺偉いじゃなくてできないのかな。よほどそれを出すのに時間かかったとか??
なんでそういうお題をそんな俺偉いじゃなくてできないのかな。よほどそれを出すのに時間かかったとか??
169デフォルトの名無しさん (ワッチョイ 1e98-kArq)
2018/10/04(木) 20:12:23.41ID:8ua9ZMtc0 はい。想定通りのレスだね。
言い訳だけは一人前w
言い訳だけは一人前w
170デフォルトの名無しさん (ワッチョイ ae3b-Nzta)
2018/10/04(木) 20:13:26.14ID:n5lIiyiD0 いや、ふつうわかるだろう。まあ、かなり頑張って出したんだね、やっぱりw
171デフォルトの名無しさん (ワッチョイ 1e98-kArq)
2018/10/04(木) 20:14:13.91ID:8ua9ZMtc0 じゃあもう一問。そんなに言うなら次は答えてね
172デフォルトの名無しさん (ワッチョイ ae3b-Nzta)
2018/10/04(木) 20:15:02.61ID:n5lIiyiD0 だから、なんでそんな上から目線なのよ
んなのに付き合うと思ってるの?あんた自体が上から目線でモノ言われたらすぐ反発するくせにww
んなのに付き合うと思ってるの?あんた自体が上から目線でモノ言われたらすぐ反発するくせにww
173デフォルトの名無しさん (ワッチョイ ae3b-Nzta)
2018/10/04(木) 20:18:43.51ID:n5lIiyiD0 いや、上から目線じゃなくても反論されたらかwww
174デフォルトの名無しさん (ワッチョイ 1e98-kArq)
2018/10/04(木) 20:20:37.56ID:8ua9ZMtc0 >>172
お前はこのおっさんと同じ種類の人間だろうな
相手が下だと思って接してるやつ。
まずお前が上から目線を止めたら?
https://togetter.com/li/1175445
おっさんがタメ語で聞いてきたからタメ語で返したらショックを受けてた。敬意が返ってくると思ってる日本のおっさんって不思議。
お前はこのおっさんと同じ種類の人間だろうな
相手が下だと思って接してるやつ。
まずお前が上から目線を止めたら?
https://togetter.com/li/1175445
おっさんがタメ語で聞いてきたからタメ語で返したらショックを受けてた。敬意が返ってくると思ってる日本のおっさんって不思議。
175デフォルトの名無しさん (ワッチョイ ae3b-Nzta)
2018/10/04(木) 20:24:38.91ID:n5lIiyiD0 いや、お前に合わせているだけだな。さすが常時上から目線なんかしらんが常時上に立ちたいの人は言うことが違うなw
176デフォルトの名無しさん (ワッチョイ 1e98-kArq)
2018/10/04(木) 20:27:29.69ID:8ua9ZMtc0 上にたってるつもりはないんですが、上に見えちゃうんですかね?w
悪い奴らが「正義の味方のつもりかよwww」って
笑ってるようなシーンがあるけど、あれも悪い奴らに
正義に見えてるからそう言うんでしょうねぇ
悪い奴らが「正義の味方のつもりかよwww」って
笑ってるようなシーンがあるけど、あれも悪い奴らに
正義に見えてるからそう言うんでしょうねぇ
177デフォルトの名無しさん (ワッチョイ ae3b-Nzta)
2018/10/04(木) 20:28:28.79ID:n5lIiyiD0 忘れているのか常時上に立っているつもりで気がつけないwのか知らんが、ID:8ua9ZMtc0 の上から目線なレスに対しての俺のレスでしかないよ
なので、その得意げの>>174はそっくりそのままあんたにお返しいたします
なので、その得意げの>>174はそっくりそのままあんたにお返しいたします
178デフォルトの名無しさん (ワッチョイ ae3b-Nzta)
2018/10/04(木) 20:29:44.58ID:n5lIiyiD0 あーあ、病気なのか社会性がないのか話にならんな。まあ、いつもの無理やりなごまかしモードかな?w
179デフォルトの名無しさん (ワッチョイ 9c03-GavF)
2018/10/04(木) 20:33:31.45ID:vhCji18k0 目くそ鼻くそに上も下もないわwwww
180デフォルトの名無しさん (ワッチョイ ae3b-Nzta)
2018/10/04(木) 20:34:30.94ID:n5lIiyiD0 やかましいわっw
181デフォルトの名無しさん (ワッチョイ 1e98-kArq)
2018/10/04(木) 20:50:21.03ID:8ua9ZMtc0 これはある意味有名だから簡単だと思う
お題
ある関数に対して1以上の整数Nを引数にして呼び出した時、
1からNまでを出力する関数を作成せよ(要するにseqコマンドの簡易版)
seq 5
1
2
3
4
5
:
ただし、シェルビルトイン関数のみを使い、変数の使用は禁止とする
(ここでいう変数とはsetコマンドで表示されるもののことである)
お題
ある関数に対して1以上の整数Nを引数にして呼び出した時、
1からNまでを出力する関数を作成せよ(要するにseqコマンドの簡易版)
seq 5
1
2
3
4
5
:
ただし、シェルビルトイン関数のみを使い、変数の使用は禁止とする
(ここでいう変数とはsetコマンドで表示されるもののことである)
182デフォルトの名無しさん (ワッチョイ 9c03-GavF)
2018/10/04(木) 20:52:49.73ID:vhCji18k0 >>181
調子にのるな鼻くそ
調子にのるな鼻くそ
183デフォルトの名無しさん (アウアウカー Sa0a-iYeS)
2018/10/04(木) 21:39:22.36ID:sVn7z6Qaa184デフォルトの名無しさん (ワッチョイ 7ab3-H3tq)
2018/10/04(木) 23:11:17.39ID:4+O8yrpt0 こいつ構わん方がいいゼ、俺スゲーしたいだけだから
185デフォルトの名無しさん (アウアウカー Sa0a-v2gR)
2018/10/04(木) 23:14:04.78ID:GYhkNq19a レス番飛び過ぎにも程があるだろ
まぁいつもの長文だらだら流して悦に浸ってるんだろうが
まぁいつもの長文だらだら流して悦に浸ってるんだろうが
186デフォルトの名無しさん (ワッチョイ ae3b-Nzta)
2018/10/04(木) 23:32:35.30ID:n5lIiyiD0 >>183
http://pubs.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html
2004の時点であるらしい。++と--は任意。sizeof()なんてあるのかよっ
http://pubs.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html
2004の時点であるらしい。++と--は任意。sizeof()なんてあるのかよっ
187デフォルトの名無しさん (ワッチョイ b064-selW)
2018/10/04(木) 23:46:42.45ID:/YMF27MO0 >>181
これは興味から訊くんだけど,
「(POSIXの範囲では)変数の局所化ができないので
変数をなるべく使わないべき」
という主張は理解できるし,俺自身もそう思う。
しかしシェルビルトイン関数しか使わず,例えば
sed(1)やawk(1)など目的に合った有用なコマンドを用いない理由はなんだ?
ただの趣味?
これは興味から訊くんだけど,
「(POSIXの範囲では)変数の局所化ができないので
変数をなるべく使わないべき」
という主張は理解できるし,俺自身もそう思う。
しかしシェルビルトイン関数しか使わず,例えば
sed(1)やawk(1)など目的に合った有用なコマンドを用いない理由はなんだ?
ただの趣味?
188デフォルトの名無しさん (ワッチョイ 969f-vBoO)
2018/10/05(金) 01:23:25.22ID:x9IT1j0q0 >>181
$(( )) での計算をしていいなら簡単だよ。
#!/bin/bash
f() {
if [[ $1 -gt 0 ]]; then
f $(( $1 - 1 ))
echo $1
fi
}
f $1
$(( )) での計算をしていいなら簡単だよ。
#!/bin/bash
f() {
if [[ $1 -gt 0 ]]; then
f $(( $1 - 1 ))
echo $1
fi
}
f $1
189デフォルトの名無しさん (ワッチョイ 969f-vBoO)
2018/10/05(金) 01:24:51.76ID:x9IT1j0q0 >>186
そうだったのか。
そうだったのか。
190デフォルトの名無しさん (ワッチョイ 1e98-kArq)
2018/10/05(金) 02:53:44.46ID:bSHFQ9XI0 >>187
現実的なポータビリティと速度のため
POSIXの範囲でやれば、シェルが異なっても動くことが期待できる
だけど現実的にはすべての環境がPOSIXに準拠してるわけではない
特にbusyboxは組み込み向けに必要最小限の機能に減らせるから
sedやawkすらない環境というのもあり得るだろう
そしてもう一つforkは遅い。WSL上だと目に見えて遅い
以下のコードをWSLで実行すると約25秒かかる。fork一回あたり2.5ミリ秒
Linuxだと約2秒。fork1回あたり2ミリ秒。10倍以上の差がある
i=0
while [ $i -lt 10000 ]; do
( :; )
i=$((i+1))
done
この()を外すとWSL上で0.05秒にまで減る。コマンド実行のオーバーヘッドに
埋もれてしまってよくわからないので、10,000から1,000,000から増やすと約1.7秒
つまり一回あたり0.0017ミリ秒。この値はLinuxでも変わらない
外部コマンドの実行でもforkが行われるから
Linux・・・0.0017ミリ秒 → 2ミリ秒 (約1176倍)
WSL・・・0.0017ミリ秒 → 25ミリ秒 (約14706倍)
と大幅に速度が落ちる。シェルスクリプトが遅いと言われる原因の一つ
現実的なポータビリティと速度のため
POSIXの範囲でやれば、シェルが異なっても動くことが期待できる
だけど現実的にはすべての環境がPOSIXに準拠してるわけではない
特にbusyboxは組み込み向けに必要最小限の機能に減らせるから
sedやawkすらない環境というのもあり得るだろう
そしてもう一つforkは遅い。WSL上だと目に見えて遅い
以下のコードをWSLで実行すると約25秒かかる。fork一回あたり2.5ミリ秒
Linuxだと約2秒。fork1回あたり2ミリ秒。10倍以上の差がある
i=0
while [ $i -lt 10000 ]; do
( :; )
i=$((i+1))
done
この()を外すとWSL上で0.05秒にまで減る。コマンド実行のオーバーヘッドに
埋もれてしまってよくわからないので、10,000から1,000,000から増やすと約1.7秒
つまり一回あたり0.0017ミリ秒。この値はLinuxでも変わらない
外部コマンドの実行でもforkが行われるから
Linux・・・0.0017ミリ秒 → 2ミリ秒 (約1176倍)
WSL・・・0.0017ミリ秒 → 25ミリ秒 (約14706倍)
と大幅に速度が落ちる。シェルスクリプトが遅いと言われる原因の一つ
191デフォルトの名無しさん (ワッチョイ d980-A6IM)
2018/10/05(金) 02:58:21.89ID:elz6X2140 なんもわかってない低学歴知恵遅れが
はりきってしょうもないwsl使ってキャッキャッいってるわけか
なるほどなるほど
wsl使ってるのなんかニートぐらいしかいないわ
マジで
はりきってしょうもないwsl使ってキャッキャッいってるわけか
なるほどなるほど
wsl使ってるのなんかニートぐらいしかいないわ
マジで
192デフォルトの名無しさん (ワッチョイ 1e98-kArq)
2018/10/05(金) 03:00:21.47ID:bSHFQ9XI0 >>188
やっぱり簡単だったかw
再帰を使うやり方で関数型言語ではおなじみの問題
もちろんシェルスクリプトは関数型ではないし
末尾最適化も行われないのでどうしても遅くなる
さすがにこれは変数使ったほうが良いかな思ったw
他にも問題を作れそうなネタのはいくつかあるんで
気が向いたらまた問題にしてみるよ
やっぱり簡単だったかw
再帰を使うやり方で関数型言語ではおなじみの問題
もちろんシェルスクリプトは関数型ではないし
末尾最適化も行われないのでどうしても遅くなる
さすがにこれは変数使ったほうが良いかな思ったw
他にも問題を作れそうなネタのはいくつかあるんで
気が向いたらまた問題にしてみるよ
193デフォルトの名無しさん (ワッチョイ 1e98-kArq)
2018/10/05(金) 03:01:11.86ID:bSHFQ9XI0194デフォルトの名無しさん (ワッチョイ 7ab3-H3tq)
2018/10/05(金) 03:25:46.03ID:98l9MfY+0 実用的じゃないもの書いてるうちは似非の技術者じゃの
195デフォルトの名無しさん (ワッチョイ b064-selW)
2018/10/05(金) 03:52:16.47ID:DwOdckeN0196デフォルトの名無しさん (ワッチョイ 1e98-kArq)
2018/10/05(金) 08:48:03.27ID:bSHFQ9XI0 >>195
ストリーミング指向と制御文はあまり関係ないと思うよ
流れてくるものに対してなにか処理をしたいなら必ず
制御文を使うことになるし
ストリーミング指向の話をするなら、関数呼び出しし結果の標準出力を
変数にキャプチャするっていうのはストリーミング指向と反してると思う
例えば result=$(command "$data") みたいな形のことね
俺もこの書き方はなるべく避けるようになった
ストリーミング指向的には echo "$data" | command | 別のなにか
とするほうが良いだろう
ただ気づいたのがこの形だとサブシェルになってしまうから、
commandや別のなにかから、呼び出しの起点にデータを戻すことが
簡単にはできないという所。値を戻すこと自体がストリーミングの流れに反しているし
かと言ってそれが必要な場合もある。例えば処理した行数をカウントしたりとかね。
なので最近はイベントハンドラ方式を使うようになった
echo "$data" | command "別のなにか(関数名)" (または command "$data" "別のなにか")
例えばだけどこんな感じにして、commandで$dataを1行ずつ処理して
その都度、別のなにか(関数)を呼び出す。そうするとサブシェルにはならないので
ストリーミングで処理しつつ、グローバル変数経由で呼び出し元に結果を返すことができる
この時、別の何かがシェル関数の場合に、commandが外部コマンドだとシェル関数を呼び出せないので
連鎖的にcommandもシェル関数として実装。みたいなこともやってたりする
ストリーミング指向と制御文はあまり関係ないと思うよ
流れてくるものに対してなにか処理をしたいなら必ず
制御文を使うことになるし
ストリーミング指向の話をするなら、関数呼び出しし結果の標準出力を
変数にキャプチャするっていうのはストリーミング指向と反してると思う
例えば result=$(command "$data") みたいな形のことね
俺もこの書き方はなるべく避けるようになった
ストリーミング指向的には echo "$data" | command | 別のなにか
とするほうが良いだろう
ただ気づいたのがこの形だとサブシェルになってしまうから、
commandや別のなにかから、呼び出しの起点にデータを戻すことが
簡単にはできないという所。値を戻すこと自体がストリーミングの流れに反しているし
かと言ってそれが必要な場合もある。例えば処理した行数をカウントしたりとかね。
なので最近はイベントハンドラ方式を使うようになった
echo "$data" | command "別のなにか(関数名)" (または command "$data" "別のなにか")
例えばだけどこんな感じにして、commandで$dataを1行ずつ処理して
その都度、別のなにか(関数)を呼び出す。そうするとサブシェルにはならないので
ストリーミングで処理しつつ、グローバル変数経由で呼び出し元に結果を返すことができる
この時、別の何かがシェル関数の場合に、commandが外部コマンドだとシェル関数を呼び出せないので
連鎖的にcommandもシェル関数として実装。みたいなこともやってたりする
197デフォルトの名無しさん (ワッチョイ 1e98-kArq)
2018/10/05(金) 17:11:32.63ID:bSHFQ9XI0 10. 移植性のあるシェルプログラミング
http://web.sfc.wide.ad.jp/~sagawa/gnujdoc/autoconf-2.59/autoconf-ja_10.html
http://web.sfc.wide.ad.jp/~sagawa/gnujdoc/autoconf-2.59/autoconf-ja_10.html
198デフォルトの名無しさん (ワッチョイ 2abe-selW)
2018/10/05(金) 21:16:49.85ID:NK5dBb8n0 >>196
なるほど。
俺は
https://www.ipsj.or.jp/dp/contents/publication/32/S0804-R1601.html
ここの3.1.1を読んで、制御文をなるべく使わない方向に開発をシフトしてみたんだよね。
まあどうしても必要な部分はあなたも云ってる通りもちろんあるけど。
なるほど。
俺は
https://www.ipsj.or.jp/dp/contents/publication/32/S0804-R1601.html
ここの3.1.1を読んで、制御文をなるべく使わない方向に開発をシフトしてみたんだよね。
まあどうしても必要な部分はあなたも云ってる通りもちろんあるけど。
199デフォルトの名無しさん (ワッチョイ 1e98-kArq)
2018/10/06(土) 08:20:34.66ID:Sfai+wMy0 >>198
別にその記事に大きく反対したいわけじゃないけど
おかしな点は指摘しておかないといけない
その手続き型コーディングがステップ数が多く処理効率が低いと書いてある所だが
その原因はストリーミング型コーディングのせいじゃない
rmコマンドの発行回数が原因だ
■手続き型コーディング(ステップ数が多く処理効率が低い)
i=3
while [ $i -le 10000 ]; do
file="file${i}.txt"
rm -f "$file" # 何度もrmコマンドを実行している
i=$((i+3))
done
結果
real 0m3.232s
user 0m2.488s
sys 0m0.808s
■ストリーミング型コーディング
awk 'BEGIN{for(i=3;i<=10000;i+=3){print i;}}' |
sed 's/.*/file&.txt/' |
xargs rm -f
結果
real 0m0.040s
user 0m0.004s
sys 0m0.040s
別にその記事に大きく反対したいわけじゃないけど
おかしな点は指摘しておかないといけない
その手続き型コーディングがステップ数が多く処理効率が低いと書いてある所だが
その原因はストリーミング型コーディングのせいじゃない
rmコマンドの発行回数が原因だ
■手続き型コーディング(ステップ数が多く処理効率が低い)
i=3
while [ $i -le 10000 ]; do
file="file${i}.txt"
rm -f "$file" # 何度もrmコマンドを実行している
i=$((i+3))
done
結果
real 0m3.232s
user 0m2.488s
sys 0m0.808s
■ストリーミング型コーディング
awk 'BEGIN{for(i=3;i<=10000;i+=3){print i;}}' |
sed 's/.*/file&.txt/' |
xargs rm -f
結果
real 0m0.040s
user 0m0.004s
sys 0m0.040s
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【調査】クレジットカード、1人何枚持つのが「平均的」?★3 [ひぃぃ★]
- 【作家】高市総理支持の背景に見えるヤンキー的「ケンカ上等!」と「日本人は特別だ」感がとても怖い 北原みのり [少考さん★]
- 宮崎あおい「電子レンジ持ってない」“丁寧な暮らし”を告白「ごはんを温め直すときも蒸し器」に「凄すぎ」の声 [muffin★]
- 【テレビ】池上彰氏 報道の自由度が高い国の特徴「どんどん政府を批判する。政治家は受け入れる」 一方独裁国家は… [冬月記者★]
- 「日本が戦争に一歩踏み出す危機感」官邸前で抗議デモ 高市総理“台湾有事”発言の撤回求める 中国メディアの姿も ★3 [蚤の市★]
- 「『ETC』←なんて読んでますか?」 公募で決めたのに全然呼ばれなかった“幻の愛称”とは [七波羅探題★]
- 古市憲寿「スタジオでも中国批判して気持ち良くなってる人はいるが高市答弁で日本人は損してる。国益を害した」スタジオ凍りつく [931948549]
- 今俺が満を持して…
- 車の暖房最初だけ電気で加熱してくれるか
- 高市政権「中国への反論はSNSでやるわ。覚悟しろ中国!!!!!」 [834922174]
- 昔『境界性人格障害』って流行ったけど、その実態は単なる発達障害よな [455031798]
- ♪グレートタイフーン嵐を呼ぶぜ~俺はグレート~
