シェルスクリプトに関する総合スレッドです。
全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。
・「○○(他の言語)でいいやん」は禁止。他のスレに行ってください。
シェルスクリプト総合 その30
https://mevius.5ch.net/test/read.cgi/tech/1561989867/
シェルスクリプト総合 その31
■ このスレッドは過去ログ倉庫に格納されています
2019/08/10(土) 23:17:50.64ID:L+B8OP2P
697デフォルトの名無しさん
2019/10/01(火) 00:27:03.86ID:rxcb8vGn 必須すぎやろw
698デフォルトの名無しさん
2019/10/01(火) 01:47:40.69ID:SPlRKvH8 なになに縛りが好きなマゾなんだろうw
699デフォルトの名無しさん
2019/10/01(火) 02:00:19.69ID:rxcb8vGn そんな事する必要がないなら縛りって言ってもいいけど、
perlが入ってない環境は実際に存在するからね
perlが入ってない環境は実際に存在するからね
700デフォルトの名無しさん
2019/10/01(火) 02:09:56.58ID:ESup7bfu awkも使えない環境で何やるんだよw
701デフォルトの名無しさん
2019/10/01(火) 02:09:58.85ID:PTA8MEY/702デフォルトの名無しさん
2019/10/01(火) 02:36:49.10ID:eGCx9XC9 >>700
awkはbusyboxに入ってるよw
awkはbusyboxに入ってるよw
703デフォルトの名無しさん
2019/10/01(火) 09:01:32.62ID:O2y9FdCY 「可搬性が高い」を「POSIX縛り」と取り違えてるおバカさんがいますね…
704デフォルトの名無しさん
2019/10/01(火) 09:11:30.09ID:ZA6pNaC0 POSIXで縛るだけではPOSIX未満のbusyboxで動かなかったりするからね
可搬性を高くするにはPOSIXで規定されたコマンドであっても
なるべく使わないほうが良い
可搬性を高くするにはPOSIXで規定されたコマンドであっても
なるべく使わないほうが良い
705デフォルトの名無しさん
2019/10/01(火) 10:51:02.41ID:CGhZJwfl どういうことなの…
706デフォルトの名無しさん
2019/10/01(火) 11:09:51.43ID:ZA6pNaC0 ここはシェルスクリプトのスレ
つまり可搬性とはシェルスクリプトの話をしてる。
シェルスクリプトではよく外部コマンドを呼び出す
しかし外部コマンドはOSによって違う。
特に基本的なコマンドは、各OSでバラバラに作っていたり
独自の修正を入れており複数の実装があり微妙に動きが異なっている。
例えば、LinuxのsedとMacのsedでは使える命令が違う。
POSIX準拠のコマンド(もちろんオプションなども含む)で規定されてるものだけを
使っていれば可搬性はそれなりにあるが、それでも完璧じゃない。
例えば組み込みで使われるbusyboxはPOSIX準拠コマンドのサブセットが実装されてる。
だから本気で可搬性を高くしようと思えばPOSIX縛りでも不十分。
POSIX準拠のコマンドが信じれない。という前提にたてば
思い切って外部コマンドすら呼び出さない、完全にシェルスクリプトだけで
実装するのがもっとも可搬性が高い。
もちろん限界は有るので実際には出来る限りシェルスクリプトで作って、
外部コマンドは必要最小限、必要に応じて互換性を吸収するようにラッパー関数を作る。
ということになる。
つまり可搬性とはシェルスクリプトの話をしてる。
シェルスクリプトではよく外部コマンドを呼び出す
しかし外部コマンドはOSによって違う。
特に基本的なコマンドは、各OSでバラバラに作っていたり
独自の修正を入れており複数の実装があり微妙に動きが異なっている。
例えば、LinuxのsedとMacのsedでは使える命令が違う。
POSIX準拠のコマンド(もちろんオプションなども含む)で規定されてるものだけを
使っていれば可搬性はそれなりにあるが、それでも完璧じゃない。
例えば組み込みで使われるbusyboxはPOSIX準拠コマンドのサブセットが実装されてる。
だから本気で可搬性を高くしようと思えばPOSIX縛りでも不十分。
POSIX準拠のコマンドが信じれない。という前提にたてば
思い切って外部コマンドすら呼び出さない、完全にシェルスクリプトだけで
実装するのがもっとも可搬性が高い。
もちろん限界は有るので実際には出来る限りシェルスクリプトで作って、
外部コマンドは必要最小限、必要に応じて互換性を吸収するようにラッパー関数を作る。
ということになる。
707デフォルトの名無しさん
2019/10/01(火) 15:50:14.87ID:P1455Lxu 可搬性に異常に拘っているのは一人か二人しかいないけどな
可搬性に拘ってないというレスにも可搬性を押し付ける
可搬性に拘ってないというレスにも可搬性を押し付ける
708デフォルトの名無しさん
2019/10/01(火) 16:28:55.36ID:9fvqkmcJ 認めろよ。
シェルスクリプトに可搬性などない。
どこでも動くシェルスクリプトなど幻想。
シェルスクリプトに可搬性などない。
どこでも動くシェルスクリプトなど幻想。
709デフォルトの名無しさん
2019/10/01(火) 16:40:08.47ID:8eIOCDAd hoge () {
echo "Hello"
}
for i in $(seq 1000); do
hoge
a=$(hoge)
done
myfunc と a=$(myfunc) の実行時間の差はなんなん?標準出力を横取りするためだけにしてはコストが高いかな
簡単に思いつくのは横取りするためパイプでで別プロセスにしなきゃとかかな?
echo "Hello"
}
for i in $(seq 1000); do
hoge
a=$(hoge)
done
myfunc と a=$(myfunc) の実行時間の差はなんなん?標準出力を横取りするためだけにしてはコストが高いかな
簡単に思いつくのは横取りするためパイプでで別プロセスにしなきゃとかかな?
710デフォルトの名無しさん
2019/10/01(火) 16:46:56.18ID:O2y9FdCY それBashでやってない?
試しにKshでやってみて。(俺環かもしれんから,速度比較は晒さない)
試しにKshでやってみて。(俺環かもしれんから,速度比較は晒さない)
711デフォルトの名無しさん
2019/10/01(火) 16:52:40.16ID:/6RuW8/Q perlが入ってない環境ってそれは入れる必要ないんだろ
一から構築していくならそれでいいけど
一から構築していくならそれでいいけど
712デフォルトの名無しさん
2019/10/01(火) 16:54:32.38ID:8eIOCDAd なるほど。ksh(だけが?)がなんか賢いかな。zsh他も差がある
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)"
↑これは不要
"引数"として渡す場合に必要。
変数への代入は引数ではないので不要
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- パワフル女性世界3位に高市首相 米誌フォーブス選出 [蚤の市★]
- テレ朝本社から社外スタッフの男性が転落し死亡 テレビ朝日がコメント [ひかり★]
- 【米FRB】0.25%利下げ決定 3会合連続、雇用下支え [蚤の市★]
- アイヌ民族の「戸籍簿」がヤフオクで落札 団体「人権無視」と憤り [蚤の市★]
- 【S.RIDE】「忘年会の幹事ずるい」 ソニー系配車アプリの広告が物議…… 運営が謝罪「配慮に欠ける不適切な表現」掲出終了に [ぐれ★]
- 【維新→自民党・旧安倍派】元衆院議員の妻を逮捕、コロナ補助金5000万円詐取疑い 名古屋地検 [ぐれ★]
- スーパーで売ってる鍋出汁で最強なのって結局
- 【画像】東京都民「助けて!満員電車もう無理いいぃぃいいぃぃぃいいいいいぃ😭」!!!! [732289945]
- 【堂上隼人】ソフトバンク幹部「よし更生してる」→現在までに逮捕12回、レイプ被害者15人
- 【悲報】教育ママ「ギャオオオオオン!息子が大麻吸ってるのお!!」⇨中3の息子を警察に突き出し全てを終わらせる [455031798]
- 【誰食】おせち料理で確実にゴミ箱行きになる食材1位、「黒豆」 [748563222]
- ミラブルシャワーヘッド買ったった
