シェルスクリプトに関する総合スレッドです。
全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。
・「○○(他の言語)でいいやん」は禁止。他のスレに行ってください。
シェルスクリプト総合 その30
https://mevius.5ch.net/test/read.cgi/tech/1561989867/
探検
シェルスクリプト総合 その31
■ このスレッドは過去ログ倉庫に格納されています
2019/08/10(土) 23:17:50.64ID:L+B8OP2P
713デフォルトの名無しさん
2019/10/01(火) 17:07:00.59ID:cNB/gbgI perlが無い環境があるからどうのこうの言うけど
kshが無い環境があるからは言わないんだなw
kshが無い環境があるからは言わないんだなw
714デフォルトの名無しさん
2019/10/01(火) 17:10:13.56ID:8eIOCDAd 違う人じゃね?同一人物だったらアレだけどw
715デフォルトの名無しさん
2019/10/01(火) 18:59:48.82ID:8eIOCDAd716デフォルトの名無しさん
2019/10/01(火) 19:16:54.12ID:fust4gpU >>709
forkだよ。$( ) の部分がサブシェルになってて
多くのシェルではサブシェル = 別プロセス生成で実装されてる。
そのおかげでサブシェルの中でcdを実行したり変数を使ったりしても
呼び出し元は汚染されたりしない
kshはサブシェルの実装が最適化されていて
全てではないが、サブシェルの部分を同一プロセスで実行する。
独自で状態の保存と復帰を実装してるのだろう。
https://codeday.me/jp/qa/20190810/1425430.html
kshは速いと言っちゃ速いんだが、その(複雑な?)仕組みのせいで
バグのもとになってたりする。ということを書いてあるページが
有ったんだがどこか忘れた。
forkだよ。$( ) の部分がサブシェルになってて
多くのシェルではサブシェル = 別プロセス生成で実装されてる。
そのおかげでサブシェルの中でcdを実行したり変数を使ったりしても
呼び出し元は汚染されたりしない
kshはサブシェルの実装が最適化されていて
全てではないが、サブシェルの部分を同一プロセスで実行する。
独自で状態の保存と復帰を実装してるのだろう。
https://codeday.me/jp/qa/20190810/1425430.html
kshは速いと言っちゃ速いんだが、その(複雑な?)仕組みのせいで
バグのもとになってたりする。ということを書いてあるページが
有ったんだがどこか忘れた。
717デフォルトの名無しさん
2019/10/01(火) 19:25:21.59ID:fust4gpU 遅い原因の本質は標準出力のキャプチャじゃないから
この二つでも違いがでる
hoge () {
:
}
for i in $(seq 1000); do
hoge
(hoge)
done
>>715
> kshでも差があるね。ループ数増やせば体感できるほどの差となるね
そうなんだよね。サブシェルのコストは以外と大きい。
だから変数に入れて使うことが目的とした関数は以下のように
グローバル変数を使って返したほうがずっと速いわけさ
hoge () {
RET=Hello
}
for i in $(seq 1000); do
hoge
a=$RET
done
この二つでも違いがでる
hoge () {
:
}
for i in $(seq 1000); do
hoge
(hoge)
done
>>715
> kshでも差があるね。ループ数増やせば体感できるほどの差となるね
そうなんだよね。サブシェルのコストは以外と大きい。
だから変数に入れて使うことが目的とした関数は以下のように
グローバル変数を使って返したほうがずっと速いわけさ
hoge () {
RET=Hello
}
for i in $(seq 1000); do
hoge
a=$RET
done
718デフォルトの名無しさん
2019/10/01(火) 19:26:55.18ID:8eIOCDAd >>716
内部関数なのにってとこがね&普通の他の言語とはやはり違うな(まあ当然だが)という(内部汚染とかこれの本題ではないっすよ)
zshはkshを習ってだけど、ちょこちょこ習えてないなあ。kshの否定面のレスだけど、kshは人に優しいとこもあるとも思うw
a=0
ls | while read line; do
[ "$line" = 'hoge' ] && a=1
done
[ a -eq 1 ] && ...
っていう見た目他の言語的では当たり前のがちゃんと動くというwまあ、異端だけど
とりあえず、どうしようもないそういうものということでいいのね。どうも
内部関数なのにってとこがね&普通の他の言語とはやはり違うな(まあ当然だが)という(内部汚染とかこれの本題ではないっすよ)
zshはkshを習ってだけど、ちょこちょこ習えてないなあ。kshの否定面のレスだけど、kshは人に優しいとこもあるとも思うw
a=0
ls | while read line; do
[ "$line" = 'hoge' ] && a=1
done
[ a -eq 1 ] && ...
っていう見た目他の言語的では当たり前のがちゃんと動くというwまあ、異端だけど
とりあえず、どうしようもないそういうものということでいいのね。どうも
719デフォルトの名無しさん
2019/10/01(火) 19:30:13.87ID:8eIOCDAd >>717
せっかくですが、ちょい本題とは違うかな。そりゃ () は...
なんで内部関数なのにサブシェルになんのかねん、他の言語的感覚ではという
まあ、内部関数だろうと、() と同じで $() もサブシェルになるということをおっしゃっりたいのでしょうけど
どうも
せっかくですが、ちょい本題とは違うかな。そりゃ () は...
なんで内部関数なのにサブシェルになんのかねん、他の言語的感覚ではという
まあ、内部関数だろうと、() と同じで $() もサブシェルになるということをおっしゃっりたいのでしょうけど
どうも
720デフォルトの名無しさん
2019/10/01(火) 19:37:54.80ID:fust4gpU >>719
> なんで内部関数なのにサブシェルになんのかねん、
考え方が違う。
コマンド置換$( ) は「サブシェルを使用して実行する」という"仕様"なんだよ
なんでサブシェルになるのか?ではなく仕様でサブシェルにすると決まってる。
ただし別プロセスにするとは決まっていない。だから子プロセスとかいう既存の
名前ではなく、新たにサブシェルという用語を作った。
サブシェルの仕様としては、「サブシェル内で行った変数などの変更は呼び出し元には伝わらない。」
などがあるが、それを実現してるなら別の別プロセスでなくてもよい。
だけど別プロセスにするほうが実装が簡単だから多くのシェルではサブシェル=別プロセスになってる。
> なんで内部関数なのにサブシェルになんのかねん、
考え方が違う。
コマンド置換$( ) は「サブシェルを使用して実行する」という"仕様"なんだよ
なんでサブシェルになるのか?ではなく仕様でサブシェルにすると決まってる。
ただし別プロセスにするとは決まっていない。だから子プロセスとかいう既存の
名前ではなく、新たにサブシェルという用語を作った。
サブシェルの仕様としては、「サブシェル内で行った変数などの変更は呼び出し元には伝わらない。」
などがあるが、それを実現してるなら別の別プロセスでなくてもよい。
だけど別プロセスにするほうが実装が簡単だから多くのシェルではサブシェル=別プロセスになってる。
721デフォルトの名無しさん
2019/10/01(火) 19:41:25.43ID:8eIOCDAd >>720
その続きなどを読んでよ。言われていることはすでに書いてあるんですけど
どうしようもないという結論が得られたのでw、
結局、こんなことにもそれなりの差があるんだから「常時それも無条件で」実行時間の差があるなんて気にするなんて無意味だなと
なにかそれが問題になったときに気にする対応すればいいだけだなという。のをそもそも言いたかったw
その続きなどを読んでよ。言われていることはすでに書いてあるんですけど
どうしようもないという結論が得られたのでw、
結局、こんなことにもそれなりの差があるんだから「常時それも無条件で」実行時間の差があるなんて気にするなんて無意味だなと
なにかそれが問題になったときに気にする対応すればいいだけだなという。のをそもそも言いたかったw
722デフォルトの名無しさん
2019/10/01(火) 19:44:28.64ID:fust4gpU >>718
> 内部関数なのにってとこがね
他の言語の場合、(基本的に)関数内の変数の変更は呼び出し元に反映されない。
つまりローカル変数になってるだろ?
それと同じなんだよ。POSIXの範囲ではlocalもtypesetもないから
シェルスクリプトにはローカル変数がない
ように思えるが、実はサブシェルを使うからローカル変数は必要ない。とも言える。
ローカル変数を実現するためのサブシェルと言える。
サブシェルの仕様としてローカル変数は必須の機能だが、別プロセスにするのは必須ではない。
サブシェル(別プロセス)と捉えるから仰々しくなってるが、
変数のローカル化と考えれば、内部関数内の変数をローカル化するってだけだから
「内部関数なのに」とは思わないだろ?
> 内部関数なのにってとこがね
他の言語の場合、(基本的に)関数内の変数の変更は呼び出し元に反映されない。
つまりローカル変数になってるだろ?
それと同じなんだよ。POSIXの範囲ではlocalもtypesetもないから
シェルスクリプトにはローカル変数がない
ように思えるが、実はサブシェルを使うからローカル変数は必要ない。とも言える。
ローカル変数を実現するためのサブシェルと言える。
サブシェルの仕様としてローカル変数は必須の機能だが、別プロセスにするのは必須ではない。
サブシェル(別プロセス)と捉えるから仰々しくなってるが、
変数のローカル化と考えれば、内部関数内の変数をローカル化するってだけだから
「内部関数なのに」とは思わないだろ?
723デフォルトの名無しさん
2019/10/01(火) 19:51:56.19ID:8eIOCDAd >>722
なにを教えてくれてるのか教えたいのかわからないです
内部変数?内部変数環境のことは言ってないです。他の言語でもの(内部)関数を呼ぶその返り値を使うって話なんですけど
内部変数云々ならhogeもサブシェルにしなくちゃじゃないですか?内部関数という言葉が悪かったならすまんすですけど
なにを教えてくれてるのか教えたいのかわからないです
内部変数?内部変数環境のことは言ってないです。他の言語でもの(内部)関数を呼ぶその返り値を使うって話なんですけど
内部変数云々ならhogeもサブシェルにしなくちゃじゃないですか?内部関数という言葉が悪かったならすまんすですけど
724デフォルトの名無しさん
2019/10/01(火) 19:52:05.05ID:fust4gpU >>718
そのコードに関しては
ls | {
a=0
while read line; do
[ "$line" = 'hoge' ] && a=1
done
[ a -eq 1 ] && ...
}
こう書けばいいって事がわかってから悩むことはなくなったなw
上記をさらに発展して、関数化すれば以下のようになる。
hoge() {
a=0
while read line; do
[ "$line" = 'hoge' ] && a=1
done
[ a -eq 1 ] && ...
}
ls | hoge
そうするとa変数は実質ローカル変数として扱ってるんだから
スコープ的にはこっちのほうが適切だと気づくだろう
そのコードに関しては
ls | {
a=0
while read line; do
[ "$line" = 'hoge' ] && a=1
done
[ a -eq 1 ] && ...
}
こう書けばいいって事がわかってから悩むことはなくなったなw
上記をさらに発展して、関数化すれば以下のようになる。
hoge() {
a=0
while read line; do
[ "$line" = 'hoge' ] && a=1
done
[ a -eq 1 ] && ...
}
ls | hoge
そうするとa変数は実質ローカル変数として扱ってるんだから
スコープ的にはこっちのほうが適切だと気づくだろう
725デフォルトの名無しさん
2019/10/01(火) 19:53:21.70ID:fust4gpU726デフォルトの名無しさん
2019/10/01(火) 19:56:56.36ID:8eIOCDAd >>725
なんか教えたがりのようですけど、ちょっと無理があるかなと
あくまでも「他の言語的感覚では」が前提、それとは違うというのの確認でしかないんですけど
使い分けるとかそもそも内部変数の話はしてないんですよ
なんか教えたがりのようですけど、ちょっと無理があるかなと
あくまでも「他の言語的感覚では」が前提、それとは違うというのの確認でしかないんですけど
使い分けるとかそもそも内部変数の話はしてないんですよ
727デフォルトの名無しさん
2019/10/01(火) 20:00:53.41ID:fust4gpU728デフォルトの名無しさん
2019/10/01(火) 20:02:16.96ID:8eIOCDAd そもそものそもそもは、bcの毎回起動するのに時間がかかるというので、せっっかくの標準で暗黙的にもマルチプロセスなのでサーバ&クラアント的に起動しとけばいいんじゃねと
trap 'exec 8>&-; exec 7>&-; rm -f from-server to-server' EXIT
mkfifo from-server
mkfifo to-server
exec 8<> to-server
exec 7<> from-server
< to-server bc -l > from-server &
calc () {
echo "$*" > to-server
read result < from-server
echo $result
}
てのを書いたのよ、単なる興味的にどれだけのコスト削減できるのかを試し確認するために。で、この一連の(他の言語的には)思ってもいなかったとこでコストがあるなと。その確認だけだよ。で、やっぱり>>721のようなことだなとw
trap 'exec 8>&-; exec 7>&-; rm -f from-server to-server' EXIT
mkfifo from-server
mkfifo to-server
exec 8<> to-server
exec 7<> from-server
< to-server bc -l > from-server &
calc () {
echo "$*" > to-server
read result < from-server
echo $result
}
てのを書いたのよ、単なる興味的にどれだけのコスト削減できるのかを試し確認するために。で、この一連の(他の言語的には)思ってもいなかったとこでコストがあるなと。その確認だけだよ。で、やっぱり>>721のようなことだなとw
729デフォルトの名無しさん
2019/10/01(火) 20:02:43.57ID:8eIOCDAd >>727
はいはい
はいはい
730デフォルトの名無しさん
2019/10/01(火) 20:09:04.89ID:fust4gpU731デフォルトの名無しさん
2019/10/01(火) 20:10:22.49ID:8eIOCDAd はいはい。知っていることを延々と言われても。それも聞いてもいないのに
732デフォルトの名無しさん
2019/10/01(火) 21:09:03.88ID:/EdGAgHY733デフォルトの名無しさん
2019/10/01(火) 21:21:30.07ID:T/R8ZN8b ろくにシェルスクリプトのことを知らないから聞いてみた。
親切に教えてくれる人がいた。
……何が不満なんだ?
親切に教えてくれる人がいた。
……何が不満なんだ?
734デフォルトの名無しさん
2019/10/01(火) 21:25:17.92ID:8eIOCDAd 何がお怒りのなのかさっぱりですけどw
735デフォルトの名無しさん
2019/10/01(火) 21:31:30.87ID:8eIOCDAd よくわからないが、他の言語で
func()
と
a = func()
で、こんな差があるのなんて、他にどの言語あるの?俺は知らない少々他の言語を知っているが
てか、そういうのは普通は「使えない」からそうならないようにするし、そもそもシングルプロセスを前提のが多いだろうから、他の一般的な言語でシェルスクリプトのようなのはちょっと思いつきません
func がまあ普通の速さなので、a = func もなんか他の方法があるのかなと。無いという確認はとれてお礼も言っているのになあ>>718で
関係ない(知っていることを)ことを延々とでいい加減してくれというのはあったけどw
func()
と
a = func()
で、こんな差があるのなんて、他にどの言語あるの?俺は知らない少々他の言語を知っているが
てか、そういうのは普通は「使えない」からそうならないようにするし、そもそもシングルプロセスを前提のが多いだろうから、他の一般的な言語でシェルスクリプトのようなのはちょっと思いつきません
func がまあ普通の速さなので、a = func もなんか他の方法があるのかなと。無いという確認はとれてお礼も言っているのになあ>>718で
関係ない(知っていることを)ことを延々とでいい加減してくれというのはあったけどw
736デフォルトの名無しさん
2019/10/01(火) 21:52:27.77ID:fust4gpU すべての言語はそれぞれ違っているんだが、
同じ言語がほしいのか?
同じ言語がほしいのか?
737デフォルトの名無しさん
2019/10/01(火) 21:57:08.01ID:Ueonb/Q5 みんな違って
みんないい
まつお
みんないい
まつお
738デフォルトの名無しさん
2019/10/01(火) 22:01:17.19ID:8eIOCDAd739デフォルトの名無しさん
2019/10/01(火) 22:14:23.82ID:8eIOCDAd そうだ、ksh(zsh)ならreadでと思ったら、逆に遅くなるのね
hoge | read a
サブシェルになるのはhoge。kshはパイプでもパイプを使わずになんちゃらを使ってなんとかかんとかwとかあったからちょっと期待したのに
あれだな、そもそもシェルスクリプトの関数の返り値はreturnでの実行ステータスしかない、それ以外の形態(テキスト)は考えていませんからこんな感じにしかなりませんってとこか
hoge | read a
サブシェルになるのはhoge。kshはパイプでもパイプを使わずになんちゃらを使ってなんとかかんとかwとかあったからちょっと期待したのに
あれだな、そもそもシェルスクリプトの関数の返り値はreturnでの実行ステータスしかない、それ以外の形態(テキスト)は考えていませんからこんな感じにしかなりませんってとこか
740デフォルトの名無しさん
2019/10/01(火) 22:58:18.96ID:9HRGRt02 for ループは、while よりも遅いだろ。
bash も、dash よりも遅いだろ
ループでは、for, bashを使わない方が速い
bash も、dash よりも遅いだろ
ループでは、for, bashを使わない方が速い
741デフォルトの名無しさん
2019/10/01(火) 23:34:09.29ID:DttT1lmW returnが返り値ってw
あれはエラー情報だろ
例外と同じ。
あれはエラー情報だろ
例外と同じ。
742デフォルトの名無しさん
2019/10/01(火) 23:35:42.98ID:DttT1lmW パイプで処理をつなげていくシェルスクリプトにおいて
返り値=出力なんだよ
出力を読み取って、処理して出力する
そういう基本がわかってないだけ
返り値=出力なんだよ
出力を読み取って、処理して出力する
そういう基本がわかってないだけ
743デフォルトの名無しさん
2019/10/01(火) 23:53:15.78ID:8eIOCDAd return
なんすけど。returnの意味知ってる?とかいう。いや、しつれい
エラー情報でもない、単なる終了ステータス。exit ではないのは、まあ、関数だからと、exit と区別がつかないからかなw
なんすけど。returnの意味知ってる?とかいう。いや、しつれい
エラー情報でもない、単なる終了ステータス。exit ではないのは、まあ、関数だからと、exit と区別がつかないからかなw
744デフォルトの名無しさん
2019/10/01(火) 23:59:02.30ID:8eIOCDAd function name () { }
が、POSIXではないのは(これからも採用されないかも?採用するの?)というのは、関数じゃねえー、所詮コマンドだなというとこかなと思ったりしてみたり、今回w
>>742そのレベルで馬鹿にできるのはあなたがそのレベルと言っているようなもんかなとw
てか、return なのにそれを返り値と見るのを頭から否定するのは、いままでの同一人物としか思えないんだけど。シェルスクリプトは知っているがシェルスクリプトしか知らないシェルスクリプトにだけ拘るw
が、POSIXではないのは(これからも採用されないかも?採用するの?)というのは、関数じゃねえー、所詮コマンドだなというとこかなと思ったりしてみたり、今回w
>>742そのレベルで馬鹿にできるのはあなたがそのレベルと言っているようなもんかなとw
てか、return なのにそれを返り値と見るのを頭から否定するのは、いままでの同一人物としか思えないんだけど。シェルスクリプトは知っているがシェルスクリプトしか知らないシェルスクリプトにだけ拘るw
745デフォルトの名無しさん
2019/10/02(水) 00:19:13.78ID:DWeKr+Az746デフォルトの名無しさん
2019/10/02(水) 00:20:54.57ID:238K9SSk マジで言ってるの?もっと勉強しよう、他人にアタるならw
747デフォルトの名無しさん
2019/10/02(水) 00:20:59.41ID:DWeKr+Az アセンブラでもreturn(RET)がある。
これも戻るという意味なだけ
呼び出し元に何かを戻すという意味はない
これも戻るという意味なだけ
呼び出し元に何かを戻すという意味はない
748デフォルトの名無しさん
2019/10/02(水) 00:23:56.96ID:238K9SSk アセンブラでもマクロアセンブラはあったりするけどな
戻り値をどういう形態で(どのレジスタにとか)という決まりであれば
>呼び出し元に何かを戻すという意味はない
マジで言っているの?アホらしい
戻り値をどういう形態で(どのレジスタにとか)という決まりであれば
>呼び出し元に何かを戻すという意味はない
マジで言っているの?アホらしい
749デフォルトの名無しさん
2019/10/02(水) 00:25:12.52ID:DWeKr+Az750デフォルトの名無しさん
2019/10/02(水) 00:26:09.34ID:DWeKr+Az https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_24
returnの説明にも、nは終了ステータスと書いてある。
return valueとは書いていない
returnの説明にも、nは終了ステータスと書いてある。
return valueとは書いていない
751デフォルトの名無しさん
2019/10/02(水) 00:30:13.30ID:238K9SSk752デフォルトの名無しさん
2019/10/02(水) 01:32:56.67ID:o4tQ0hze >>735
よく分からないで批判する癖は辞めた方が良い
よく分からないで批判する癖は辞めた方が良い
753デフォルトの名無しさん
2019/10/02(水) 01:35:11.54ID:o4tQ0hze >>751
機械語にreturnに類する語は出てこないぞ?
機械語にreturnに類する語は出てこないぞ?
754デフォルトの名無しさん
2019/10/02(水) 01:35:40.52ID:238K9SSk 「よくわからない」が何を指しているのか「よくわからない」だろう?
また単なる「語」に食いつくwいつものかとしか思えません
また単なる「語」に食いつくwいつものかとしか思えません
755デフォルトの名無しさん
2019/10/02(水) 01:36:26.76ID:238K9SSk756デフォルトの名無しさん
2019/10/02(水) 01:39:39.82ID:238K9SSk757デフォルトの名無しさん
2019/10/02(水) 01:53:53.42ID:o4tQ0hze いつもの妄言を喚いて自分の敵は一人だと思い込んでる痛い奴だったか
758デフォルトの名無しさん
2019/10/02(水) 01:55:39.44ID:238K9SSk 敵www
そういう姿勢だったのね。そうだよね、あなたはw
そういう姿勢だったのね。そうだよね、あなたはw
759デフォルトの名無しさん
2019/10/02(水) 02:46:06.49ID:JFJLbhDm IDが変わっても判別しやすいのはいいこと
ぼんやりしてて助かる
ぼんやりしてて助かる
760デフォルトの名無しさん
2019/10/02(水) 02:51:03.64ID:o4tQ0hze >>758
いやおまえ、オレと関係ない人を同一人物扱いしてんじゃん
いやおまえ、オレと関係ない人を同一人物扱いしてんじゃん
761デフォルトの名無しさん
2019/10/02(水) 02:58:29.05ID:238K9SSk762デフォルトの名無しさん
2019/10/02(水) 03:24:37.13ID:DWeKr+Az 知らないなら言わなければいいのにw
RET命令(Return from Procedure)
http://softwaretechnique.jp/OS_Development/Tips/IA32_Instructions/RET.html
RET命令(Return from Procedure)
http://softwaretechnique.jp/OS_Development/Tips/IA32_Instructions/RET.html
763デフォルトの名無しさん
2019/10/02(水) 03:28:45.47ID:238K9SSk764デフォルトの名無しさん
2019/10/02(水) 03:43:25.73ID:DWeKr+Az 同じだだろ。何いってんの?
略だから違うんだって言いたいの?
略だから違うんだって言いたいの?
765デフォルトの名無しさん
2019/10/02(水) 03:44:26.53ID:o4tQ0hze >>762
そしてそれはアセンブリ言語という..
そしてそれはアセンブリ言語という..
766デフォルトの名無しさん
2019/10/02(水) 03:46:58.80ID:DWeKr+Az シェルスクリプトのreturnは終了ステータスを返すもので
これは他の言語の返り値ではないのは一目瞭然なんだがね
だからこそ $_ という変数(外部コマンドを呼び出した時の終了ステータス)で
アクセスできるわけだし
しらないならシェルスクリプトを勉強してくださいって言うしか無いな
なんならbashのドキュメント引用しようか?
return [n]
指定した返り値 n で関数を終了させます。 n を省略すると、返却ステータスは 関数内で最後に実行したコマン
ドの返却ステータスになります。 関数の外側で使われているが、 . (source) コマンドによるスクリプトの実行
中である場合、 シェルはそのスクリプトの実行を止め、 n またはスクリプト内で最後に実行されたコマンドの
終了ステータスを スクリプトの終了ステータスとして返します。 関数の外側で . によるスクリプトの実行中以
外に使われた場合、 返却ステータスは偽となります。 関数やスクリプトから実行が戻る前に、 RETURN トラッ
プ に設定されたコマンドが実行されます。
これは他の言語の返り値ではないのは一目瞭然なんだがね
だからこそ $_ という変数(外部コマンドを呼び出した時の終了ステータス)で
アクセスできるわけだし
しらないならシェルスクリプトを勉強してくださいって言うしか無いな
なんならbashのドキュメント引用しようか?
return [n]
指定した返り値 n で関数を終了させます。 n を省略すると、返却ステータスは 関数内で最後に実行したコマン
ドの返却ステータスになります。 関数の外側で使われているが、 . (source) コマンドによるスクリプトの実行
中である場合、 シェルはそのスクリプトの実行を止め、 n またはスクリプト内で最後に実行されたコマンドの
終了ステータスを スクリプトの終了ステータスとして返します。 関数の外側で . によるスクリプトの実行中以
外に使われた場合、 返却ステータスは偽となります。 関数やスクリプトから実行が戻る前に、 RETURN トラッ
プ に設定されたコマンドが実行されます。
767デフォルトの名無しさん
2019/10/02(水) 03:47:32.93ID:DWeKr+Az768デフォルトの名無しさん
2019/10/02(水) 03:49:09.36ID:238K9SSk >>764
マジか
残念ながらが同一人物に見えるとやはりなお思ってしまうよw
マジか。そんなんで偉ぶるwなんの意味があるのだかさっぱり
そもそもマシン語ではない、アセンブリ=ニーモニックだし。ニーモニック命令は3文字にという昔の風習なだけだろうに
豆知識
そもそも、そんなRETでもいいけどReturnすらないCPUもある。POPしてジャンプという
なんだかなあ
マジか
残念ながらが同一人物に見えるとやはりなお思ってしまうよw
マジか。そんなんで偉ぶるwなんの意味があるのだかさっぱり
そもそもマシン語ではない、アセンブリ=ニーモニックだし。ニーモニック命令は3文字にという昔の風習なだけだろうに
豆知識
そもそも、そんなRETでもいいけどReturnすらないCPUもある。POPしてジャンプという
なんだかなあ
769デフォルトの名無しさん
2019/10/02(水) 03:55:47.57ID:238K9SSk770デフォルトの名無しさん
2019/10/02(水) 04:19:21.82ID:238K9SSk771デフォルトの名無しさん
2019/10/02(水) 06:38:15.47ID:Ge1fP5ct シェルスクリプトはシェルスクリプトだっていってんのに
俺は他の言語しか知らん。シェルスクリプトは他の言語じゃない!
といわれても、
うんじゃあ、シェルスクリプトを使えるように、シェルスクリプトの勉強をしましょうか?
としか言えんわなw
俺は他の言語しか知らん。シェルスクリプトは他の言語じゃない!
といわれても、
うんじゃあ、シェルスクリプトを使えるように、シェルスクリプトの勉強をしましょうか?
としか言えんわなw
772デフォルトの名無しさん
2019/10/02(水) 07:03:56.09ID:R26grXOk アセンブラじゃなくて機械語だってすごいよなw
773デフォルトの名無しさん
2019/10/02(水) 08:47:07.26ID:238K9SSk >>771
どう読んで、そう思っているのか??
俺は他の言語しか知らん。シェルスクリプトは他の言語じゃない!なんてこれっぽっちも言ってないけど
他の言語の関数とはやっぱ違う他の言語の関数と同じようにはできないねというだけだが?端的には>>735と所詮コマンドということ
POSIXとしてもfunctionと名乗ってるけど、一般的=他の多くの言語のfunctionとは違うfunction、functionというよりコマンドだなやっぱちう
それがシェルスクリプトのfunctionで他の言語のfunctionとは違うって強く俺に言いたいんですかね?
いいよ、めんどくさいから読まなくても。レスするのもめんどくさいからw
>>772
まあ、そういう意味じゃないんだけどね(どういう意味のレスなのかイマイチだがw)
マクロアセンブラがあるようにアセンブラはどのようにもできる、やろうと思えば。縛りはそこじゃなくて、機械語だなという
また、機械語になんて関数なんて概念ないからねって話にも膨らむのになというw
どう読んで、そう思っているのか??
俺は他の言語しか知らん。シェルスクリプトは他の言語じゃない!なんてこれっぽっちも言ってないけど
他の言語の関数とはやっぱ違う他の言語の関数と同じようにはできないねというだけだが?端的には>>735と所詮コマンドということ
POSIXとしてもfunctionと名乗ってるけど、一般的=他の多くの言語のfunctionとは違うfunction、functionというよりコマンドだなやっぱちう
それがシェルスクリプトのfunctionで他の言語のfunctionとは違うって強く俺に言いたいんですかね?
いいよ、めんどくさいから読まなくても。レスするのもめんどくさいからw
>>772
まあ、そういう意味じゃないんだけどね(どういう意味のレスなのかイマイチだがw)
マクロアセンブラがあるようにアセンブラはどのようにもできる、やろうと思えば。縛りはそこじゃなくて、機械語だなという
また、機械語になんて関数なんて概念ないからねって話にも膨らむのになというw
774デフォルトの名無しさん
2019/10/02(水) 09:15:47.03ID:gGwgwb6G 俺はたぬきしか知らないなんて言ってない!
みかんはたぬきとは違う!
みかんはたぬきとは違う!
775デフォルトの名無しさん
2019/10/02(水) 09:19:32.36ID:R26grXOk 機械語に関数の概念が無いってすごいよなw
776デフォルトの名無しさん
2019/10/02(水) 09:23:09.06ID:238K9SSk めんどくせえなあ。とんちんかんな変すぎるレスいらんw
知らなかったのはサブルーチンとして使うのと関数として使うのにコストの差が思った以上にあったというだけだな。functionなんだからそんなに差が無いようになんかあるだろうと思い込みによる
それだけだよ
別にだから関数のように使わないとも言わんし、いままでも使ってるし変わらずに使うけど
知らなかったのはサブルーチンとして使うのと関数として使うのにコストの差が思った以上にあったというだけだな。functionなんだからそんなに差が無いようになんかあるだろうと思い込みによる
それだけだよ
別にだから関数のように使わないとも言わんし、いままでも使ってるし変わらずに使うけど
777デフォルトの名無しさん
2019/10/02(水) 09:25:03.86ID:238K9SSk778デフォルトの名無しさん
2019/10/02(水) 09:39:55.43ID:238K9SSk 機械語にはサブルーチンはある。なきゃ困る(主にどこのアドレスに返ってくるのかのため)。単なるサブルーチンコール、引数の概念とかも無いw
引数も返り値(サブルーチン+返り値=関数)も、単なるmoveとかpushとかで「適当」なとこに入れての(主に高級言語(ほぼCだが)の仕様にあわせての)で、機械語の概念では存在しない
おしまい
引数も返り値(サブルーチン+返り値=関数)も、単なるmoveとかpushとかで「適当」なとこに入れての(主に高級言語(ほぼCだが)の仕様にあわせての)で、機械語の概念では存在しない
おしまい
779デフォルトの名無しさん
2019/10/02(水) 10:11:40.69ID:caSqV8Sl これマジ?
780デフォルトの名無しさん
2019/10/02(水) 10:39:50.67ID:238K9SSk この板にもあるだろうと思ったらあったし、
「関数」で検索したらアセンブリで関数というのを説明しているようなレスもあるやん
調べろよそのぐらいw
「関数」で検索したらアセンブリで関数というのを説明しているようなレスもあるやん
調べろよそのぐらいw
781デフォルトの名無しさん
2019/10/02(水) 10:46:24.58ID:238K9SSk ああ、すまん。勇み足だった。よく読んだらあんま詳しくはないかな
ある程度知っていての注意点ぐらいだった
ある程度知っていての注意点ぐらいだった
782デフォルトの名無しさん
2019/10/02(水) 10:51:24.96ID:238K9SSk783デフォルトの名無しさん
2019/10/02(水) 10:54:19.14ID:caSqV8Sl サンクス
読んでくるわ
読んでくるわ
784デフォルトの名無しさん
2019/10/02(水) 11:01:36.56ID:vYvaxxoe だいたいシェルスクリプトと機械語なんて超相性悪いから
シェルスクリプトの概念を例える別の言語として機械語(含むアセンブリ言語)は最悪の選択ではw
シェルスクリプトの標準・仕様書であるPOSIXも機械語には全く言及してないってか
適用範囲の節で明言してるし。
(つーかこの喧嘩って俺がkshの速度を持ち出したことが発端なんだな…
良かれと思って余計なこと言わなけりゃよかった)
シェルスクリプトの概念を例える別の言語として機械語(含むアセンブリ言語)は最悪の選択ではw
シェルスクリプトの標準・仕様書であるPOSIXも機械語には全く言及してないってか
適用範囲の節で明言してるし。
(つーかこの喧嘩って俺がkshの速度を持ち出したことが発端なんだな…
良かれと思って余計なこと言わなけりゃよかった)
785デフォルトの名無しさん
2019/10/02(水) 11:18:14.46ID:238K9SSk786デフォルトの名無しさん
2019/10/02(水) 11:26:54.15ID:238K9SSk >>784
>シェルスクリプトの標準・仕様書であるPOSIXも機械語には全く言及してないってか
>適用範囲の節で明言してるし
CPUによって全然違うし(CPUメーカーが作るもんでしょう)なあ。標準化なんてする範疇じゃないんじゃないかな
>kshの速度を持ち出したことが発端なんだな…
いや、違うよ。kshの件は早々に終わっているといえば終わってる。そんなのが全く関係ないとこでながながとなってるだけだな
その前の俺の思惑wからだな、長々としている原因は。強いて言えば
>シェルスクリプトの標準・仕様書であるPOSIXも機械語には全く言及してないってか
>適用範囲の節で明言してるし
CPUによって全然違うし(CPUメーカーが作るもんでしょう)なあ。標準化なんてする範疇じゃないんじゃないかな
>kshの速度を持ち出したことが発端なんだな…
いや、違うよ。kshの件は早々に終わっているといえば終わってる。そんなのが全く関係ないとこでながながとなってるだけだな
その前の俺の思惑wからだな、長々としている原因は。強いて言えば
787デフォルトの名無しさん
2019/10/02(水) 14:05:10.23ID:D8VruPt/788デフォルトの名無しさん
2019/10/02(水) 14:31:23.77ID:238K9SSk よくわかんないなw
789デフォルトの名無しさん
2019/10/02(水) 17:06:22.98ID:em13adMU ファイル名に()が入ってるやつをリネームしようとしたら
Syntax error: "(" unexpected
と言われる・・
ファイル名から()取り除いたらうまくいきました
どうすればよいでしょうか
Syntax error: "(" unexpected
と言われる・・
ファイル名から()取り除いたらうまくいきました
どうすればよいでしょうか
790デフォルトの名無しさん
2019/10/02(水) 17:19:25.51ID:ccSnb7w3 touch "foo()bar" で作れたからそれかな
あるいは 正規表現のできるrenameツールに任せちゃう
https://paiza.io/projects/GgkMgqOqyzwwgbmu-Fn-Vg
https://pastebin.com/pYBipcQt
~/bin/rename.pl dry s/foo../foo/ foo\(\)bar
foo()bar => foobar
~/bin/rename.pl run s/foo../foo/ foo\(\)bar
あるいは 正規表現のできるrenameツールに任せちゃう
https://paiza.io/projects/GgkMgqOqyzwwgbmu-Fn-Vg
https://pastebin.com/pYBipcQt
~/bin/rename.pl dry s/foo../foo/ foo\(\)bar
foo()bar => foobar
~/bin/rename.pl run s/foo../foo/ foo\(\)bar
791デフォルトの名無しさん
2019/10/02(水) 20:34:07.49ID:9nRFYl/a792デフォルトの名無しさん
2019/10/02(水) 20:52:22.16ID:56vpBHGI >>789
ファイル名をシングルクォートまたはダブルクォートで括る。またはそのようにシェルが特別な解釈をしてしまう文字の直前に \ を入れる。
ファイル名をシングルクォートまたはダブルクォートで括る。またはそのようにシェルが特別な解釈をしてしまう文字の直前に \ を入れる。
793デフォルトの名無しさん
2019/10/03(木) 00:15:58.71ID:SqD9WxB/ 空白絡みで便乗質問です。
スクリプトがあるディレクトリを変数に入れるために、よく、
BASEDIR=$(cd $(dirname $0); pwd)
みたいなの書くと思うんですけど、
スクリプトを呼び出す際の相対パスや絶対パスに空白があっても大丈夫な場合はどう""をつければいいんでしょうか。
いつも試行錯誤するんですけどうまくいかなくて空白禁止にしちゃってます。
スクリプトがあるディレクトリを変数に入れるために、よく、
BASEDIR=$(cd $(dirname $0); pwd)
みたいなの書くと思うんですけど、
スクリプトを呼び出す際の相対パスや絶対パスに空白があっても大丈夫な場合はどう""をつければいいんでしょうか。
いつも試行錯誤するんですけどうまくいかなくて空白禁止にしちゃってます。
794デフォルトの名無しさん
2019/10/03(木) 00:16:32.35ID:SqD9WxB/ 大丈夫な場合→大丈夫にしたい場合、です。
795デフォルトの名無しさん
2019/10/03(木) 00:41:53.26ID:kXokk7Ss dirname "$0"じゃダメな理由はなに?
796デフォルトの名無しさん
2019/10/03(木) 00:56:16.10ID:WHDqtNcX "$(dirname "$0")" じゃない
797デフォルトの名無しさん
2019/10/03(木) 02:58:37.36ID:DFQVUXe/ >>793
BASEDIR=$(cd "$(dirname "$0")"; pwd)
BASEDIR="$(cd "$(dirname "$0")"; pwd)"
↑これは不要
"引数"として渡す場合に必要。
変数への代入は引数ではないので不要
BASEDIR=$(cd "$(dirname "$0")"; pwd)
BASEDIR="$(cd "$(dirname "$0")"; pwd)"
↑これは不要
"引数"として渡す場合に必要。
変数への代入は引数ではないので不要
798デフォルトの名無しさん
2019/10/03(木) 07:38:56.48ID:vim6DLSQ799デフォルトの名無しさん
2019/10/03(木) 08:37:13.31ID:/bA39X9L 小数の計算がPOSIXで標準化されるって本当?
これどうにかしてほしいんだが
$ zsh -c 'echo $((0.1+0.2))'
0.30000000000000004
固定小数点をサポートしてくれよ。
これどうにかしてほしいんだが
$ zsh -c 'echo $((0.1+0.2))'
0.30000000000000004
固定小数点をサポートしてくれよ。
800デフォルトの名無しさん
2019/10/03(木) 09:12:38.31ID:BSBvRGI4 各言語での 0.1 + 0.2 の結果
http://0.30000000000000004.com/
http://0.30000000000000004.com/
801デフォルトの名無しさん
2019/10/03(木) 09:41:30.99ID:T62xH6xP 言語というよりはどういうライブラリ使っているかの問題だと思うが
802デフォルトの名無しさん
2019/10/03(木) 09:46:51.64ID:wbZFe5vy きちんと0.3返す言語は
分子と分母の2つ記録するから速度は遅くなる
遅いシェルスクリプトの選択した方法は正しい
分子と分母の2つ記録するから速度は遅くなる
遅いシェルスクリプトの選択した方法は正しい
803デフォルトの名無しさん
2019/10/03(木) 09:50:59.70ID:/bA39X9L いや、誰が浮動小数点数的な答えを求めてるのよ?
誰も数学的に間違った答えなんか求めてないでしょ?
誰も数学的に間違った答えなんか求めてないでしょ?
804デフォルトの名無しさん
2019/10/03(木) 13:46:15.91ID:oxXSy4fC 固定小数点なんて採用することはないな
提案してみろ、まずはStandard C Libraryとして
提案してみろ、まずはStandard C Libraryとして
805デフォルトの名無しさん
2019/10/03(木) 14:46:29.02ID:Fw9k5QN4806デフォルトの名無しさん
2019/10/03(木) 14:56:31.03ID:gitagY/F807デフォルトの名無しさん
2019/10/03(木) 15:03:35.77ID:Fw9k5QN4 そういうある意味特殊なことをしようとする意志のがあればな
結局はCなんだよどういう言語でもああいう部分は。そしてCがそうだからただそうなだけ。わざわざ言うようなことをするのは極めて少ないだろ
浮動小数点がIEEEで決められてる正規なものだし。特殊なプログラムを使えということだよ=シェルとかに求めるのは現在のコンピュータ界隈では無理筋だな
結局はCなんだよどういう言語でもああいう部分は。そしてCがそうだからただそうなだけ。わざわざ言うようなことをするのは極めて少ないだろ
浮動小数点がIEEEで決められてる正規なものだし。特殊なプログラムを使えということだよ=シェルとかに求めるのは現在のコンピュータ界隈では無理筋だな
808デフォルトの名無しさん
2019/10/03(木) 15:08:16.36ID:wbZFe5vy 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 +
を抜くと型が整数処理されるというわけのわからん挙動するケースがあったから
別の言語がいいけど
#!/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 +
を抜くと型が整数処理されるというわけのわからん挙動するケースがあったから
別の言語がいいけど
809デフォルトの名無しさん
2019/10/03(木) 17:47:54.90ID:vTPkh0Cq >>807
浮動小数点とIEEE754は同じ意味じゃないから語弊が生まれるよ。
文字コードとUTF-8ぐらいの関係だろう。
そして大抵の小数を扱えるプログラムがCでIEEE754に準拠した浮動小数点による取り扱いをしてるって意見は、全然同意できないな。
浮動小数点とIEEE754は同じ意味じゃないから語弊が生まれるよ。
文字コードとUTF-8ぐらいの関係だろう。
そして大抵の小数を扱えるプログラムがCでIEEE754に準拠した浮動小数点による取り扱いをしてるって意見は、全然同意できないな。
810デフォルトの名無しさん
2019/10/03(木) 18:03:01.77ID:NYKgu9W2 1. 数学的には正しくない。
2. 速度のために正確さを犠牲にしている。
3. 誰も間違った答えは望んでいない
仕様だから〜とかいう話じゃないんだよね。
本当はみんな正しい答えが欲しい。
シェルスクリプトに速度は重要じゃないんだから
正しい答えのほうが便利だろ
2. 速度のために正確さを犠牲にしている。
3. 誰も間違った答えは望んでいない
仕様だから〜とかいう話じゃないんだよね。
本当はみんな正しい答えが欲しい。
シェルスクリプトに速度は重要じゃないんだから
正しい答えのほうが便利だろ
811デフォルトの名無しさん
2019/10/03(木) 18:39:51.77ID:K4DSf+RO ほとんど近似値でたりるし必要なら自分でつくるなりすればとしか思わないよ
812デフォルトの名無しさん
2019/10/03(木) 18:40:45.48ID:Fw9k5QN4■ このスレッドは過去ログ倉庫に格納されています
ニュース
- テレビ朝日 本社から男性が転落し死亡。関連会社社員か 当たった通行人が左肩軽傷 [阿弥陀ヶ峰★]
- テレビ朝日本社から20~30代の関連会社社員とみられる男性が転落し死亡 六本木けやき坂通りの通行人にはけが人なし [少考さん★]
- 小島瑠璃子さん、代表取締役を務める会社を破産申請 [牛丼★]
- 「残クレ」でマイホーム、国が銀行向け保険 新型住宅ローン普及促す -日経 ★3 [少考さん★]
- 日本、G7への中国招待を懸念 議長国フランスに慎重な対応要請 [どどん★]
- 【サッカー】日本代表、FIFAランキング“4位”の強豪イングランドとの対戦が正式決定! 来年3月に聖地ウェンブリーで激突へ [久太郎★]
- 千晴におちんちん舐めてもらいたい♥
- たまにはこういうドーナッツ食いたくなるよな
- にぎにぎペニスにぎペニス♪
- 【悲報】ジャップ、日中戦争に賛成が5割弱...軍歌の音が聞こえる... [856698234]
- ブタをぶったたく
- ひまだねー
