シェルスクリプトに関する総合スレッドです。
全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。
前スレ:
シェルスクリプト総合 その29
https://mevius.5ch.net/test/read.cgi/tech/1537540487/
シェルスクリプト総合 その30
■ このスレッドは過去ログ倉庫に格納されています
2019/07/01(月) 23:04:27.02ID:/rKj5XUf
2019/07/01(月) 23:18:57.10ID:/rKj5XUf
お約束
・特記なき場合、Bourne Shell もしくは POSIX 準拠の sh 可換シェルが既定です
つまりシバンは #!/bin/sh です。
特定のシェル(bash, zsh, (m|pd)ksh, (d)ash, yash, posh, fish, (t)csh など)の専用機能に依存する場合は明示しましょう。
macOS (10.14以前), GNU/Linux ユーザー(Debian, Ubuntu 系以外) は /bin/sh の実体が bash なので*特に*注意
自覚なき bashism---シバンが #!/bin/sh なのに bash に依存する構文を使っていませんか?
ただし Debian, Ubuntu などでは /bin/sh の実体は POSIX sh 互換の dash ですのであまり気にしないでも大丈夫です。
FreeBSD ユーザーは /bin/sh の実体が ash なので注意。
Solaris, OpenBSD ユーザーは /bin/sh の実体が ksh なので注意。
macOS 10.15以降のユーザーは/bin/sh の実体が zsh なので注意。
android ユーザーは /bin/sh の実体が mksh なので注意。
csh/tcshでのシェルスクリプトは*まったく推奨しません*。
(参考URL: http://www.speech-lab.org/~hiroki/csh-whynot.euc)
・POSIX に準拠しましょう
有用なリンクは https://en.wikipedia.org/wiki/POSIX にまとめられています。
最新の仕様はこちらへ: http://pubs.opengroup.org/onlinepubs/9699919799/
(左上の「Shell & Utilities」から各コマンドやファイルの仕様を参照することができます)
・Version 7 UNIX の sh(1) に一番近いのは OpenSolaris 由来の Heirloom sh、次点で Debian などに搭載されている Dash shell
Heirloom sh: http://heirloom.sourceforge.net/sh.html
Dash shell: http://gondor.apana.org.au/~herbert/dash/
・UNIX にはシェルスクリプトに便利な小さなコマンドがいろいろあります
Man ページや各種リンク(http://pubs.opengroup.org/onlinepubs/9699919799/idx/utilities.htmlなど)を見ましょう。
apropos(1) ないしは man(1) の-kオプションでそれらしい単語による簡単な検索もできます。
・ワイルドカードは正規表現ではありません。
正規表現の話題はスレ違い(正規表現スレへ)
・シェルスクリプトのことをシェルってゆうな
・特記なき場合、Bourne Shell もしくは POSIX 準拠の sh 可換シェルが既定です
つまりシバンは #!/bin/sh です。
特定のシェル(bash, zsh, (m|pd)ksh, (d)ash, yash, posh, fish, (t)csh など)の専用機能に依存する場合は明示しましょう。
macOS (10.14以前), GNU/Linux ユーザー(Debian, Ubuntu 系以外) は /bin/sh の実体が bash なので*特に*注意
自覚なき bashism---シバンが #!/bin/sh なのに bash に依存する構文を使っていませんか?
ただし Debian, Ubuntu などでは /bin/sh の実体は POSIX sh 互換の dash ですのであまり気にしないでも大丈夫です。
FreeBSD ユーザーは /bin/sh の実体が ash なので注意。
Solaris, OpenBSD ユーザーは /bin/sh の実体が ksh なので注意。
macOS 10.15以降のユーザーは/bin/sh の実体が zsh なので注意。
android ユーザーは /bin/sh の実体が mksh なので注意。
csh/tcshでのシェルスクリプトは*まったく推奨しません*。
(参考URL: http://www.speech-lab.org/~hiroki/csh-whynot.euc)
・POSIX に準拠しましょう
有用なリンクは https://en.wikipedia.org/wiki/POSIX にまとめられています。
最新の仕様はこちらへ: http://pubs.opengroup.org/onlinepubs/9699919799/
(左上の「Shell & Utilities」から各コマンドやファイルの仕様を参照することができます)
・Version 7 UNIX の sh(1) に一番近いのは OpenSolaris 由来の Heirloom sh、次点で Debian などに搭載されている Dash shell
Heirloom sh: http://heirloom.sourceforge.net/sh.html
Dash shell: http://gondor.apana.org.au/~herbert/dash/
・UNIX にはシェルスクリプトに便利な小さなコマンドがいろいろあります
Man ページや各種リンク(http://pubs.opengroup.org/onlinepubs/9699919799/idx/utilities.htmlなど)を見ましょう。
apropos(1) ないしは man(1) の-kオプションでそれらしい単語による簡単な検索もできます。
・ワイルドカードは正規表現ではありません。
正規表現の話題はスレ違い(正規表現スレへ)
・シェルスクリプトのことをシェルってゆうな
2019/07/01(月) 23:19:51.24ID:/rKj5XUf
初心者へのアドバイス
・適した道具を判断するのも頭の重要な使い方。
シェルスクリプトよりも Per lまたは Python の方が適した処理にはそちらを使いましょう。
・知らないコマンドが出てきたら man(1) を引きましょう。
・思い通りに動かないときは、まずは sh(1) の -x オプションでトレースしましょう。
回答者への注意事項
・相手がシェルスクリプトでの処理方法を質問しているのにもかかわらず、よく知りもせずに「そういうのはPerl, Python使え」と回答するのはやめましょう。
安易に Perl や Python に逃げずに小さなコマンドを組み合わせシェルスクリプトで処理するのが頭のいいやり方。
・質問に対して問題が間違ってるといちゃもんをつけるのも避けましょう。
・適した道具を判断するのも頭の重要な使い方。
シェルスクリプトよりも Per lまたは Python の方が適した処理にはそちらを使いましょう。
・知らないコマンドが出てきたら man(1) を引きましょう。
・思い通りに動かないときは、まずは sh(1) の -x オプションでトレースしましょう。
回答者への注意事項
・相手がシェルスクリプトでの処理方法を質問しているのにもかかわらず、よく知りもせずに「そういうのはPerl, Python使え」と回答するのはやめましょう。
安易に Perl や Python に逃げずに小さなコマンドを組み合わせシェルスクリプトで処理するのが頭のいいやり方。
・質問に対して問題が間違ってるといちゃもんをつけるのも避けましょう。
2019/07/01(月) 23:28:17.35ID:GotlxjDf
2019/07/02(火) 00:29:00.45ID:rBxHnYzF
お約束
・特記なき場合,Bourne ShellもしくはPOSIX準拠のsh互換(というより再現=jシェルが質問・議論の前提です。
つまりシェルスクリプトのシバンは#!/bin/shです。
他のシェル(Bash, Zsh, Ksh, BusyBox sh, DASH, Yash, posh, fish, (t)csh)などの専用機能に依存する場合は,その旨を明示しましょう。
macOS及びGNU/Linuxの利用者は/bin/shの実体がbashなので*特に*注意; 自覚なきbashism――シバンが#!/bin/shなのにBashに依存する構文を使っていませんか?
※ただしDebian, Ubuntuなどでは/bin/shの実体はPOSIX shにかなり近い(つまり独自の拡張がほとんどない)DASHですのであまり気にしないでも大丈夫です。
FreeBSDの利用者は/bin/shの実体がashなので注意。
Solaris及びOpenBSDの利用者は/bin/shの実体がKshなので注意。
(t)cshでのシェルスクリプトは*まったく推奨しません*(参考: http://www.speech-lab.org/~hiroki/csh-whynot.euc)。
・POSIX (Portable Operating System Interface) に準拠しましょう。
有用なリンクはhttps://en.wikipedia.org/wiki/POSIX末節などを参照。
最新の仕様はこちらへ: http://pubs.opengroup.org/onlinepubs/9699919799/
(左上の「Shell & Utilities」から各コマンドの仕様を閲覧できます。また,コマンドだけでなく,ファイルその他の仕様も閲覧できます)
・Version 7 UNIXのsh(1)に一番近いのはOpenSolaris由来のHeirloom sh,次点でDebianなどに搭載されているDASH。
Heirloom sh: http://heirloom.sourceforge.net/sh.html
Dash shell: http://gondor.apana.org.au/~herbert/dash/
・Bourne shellの種類・歴史やシェルの挙動とかいろいろ詳しいサイト: https://www.in-ulm.de/~mascheck/
・Unixにはシェルスクリプトに便利な小さなコマンド類がいろいろあります。
「並び換え (sort(1))」「検索 (grep(1))」等々。
Manページや各種リンク(http://pubs.opengroup.org/onlinepubs/9699919799/idx/utilities.htmlなど)を見ましょう。
apropos(1)ないしはman(1)の-kオプションでそれらしい単語による簡単な検索もできます。
・ワイルドカードは正規表現ではありません。
正規表現の話題はスレ違い(正規表現スレへ)
・シェルスクリプトのことをシェルってゆうな
・特記なき場合,Bourne ShellもしくはPOSIX準拠のsh互換(というより再現=jシェルが質問・議論の前提です。
つまりシェルスクリプトのシバンは#!/bin/shです。
他のシェル(Bash, Zsh, Ksh, BusyBox sh, DASH, Yash, posh, fish, (t)csh)などの専用機能に依存する場合は,その旨を明示しましょう。
macOS及びGNU/Linuxの利用者は/bin/shの実体がbashなので*特に*注意; 自覚なきbashism――シバンが#!/bin/shなのにBashに依存する構文を使っていませんか?
※ただしDebian, Ubuntuなどでは/bin/shの実体はPOSIX shにかなり近い(つまり独自の拡張がほとんどない)DASHですのであまり気にしないでも大丈夫です。
FreeBSDの利用者は/bin/shの実体がashなので注意。
Solaris及びOpenBSDの利用者は/bin/shの実体がKshなので注意。
(t)cshでのシェルスクリプトは*まったく推奨しません*(参考: http://www.speech-lab.org/~hiroki/csh-whynot.euc)。
・POSIX (Portable Operating System Interface) に準拠しましょう。
有用なリンクはhttps://en.wikipedia.org/wiki/POSIX末節などを参照。
最新の仕様はこちらへ: http://pubs.opengroup.org/onlinepubs/9699919799/
(左上の「Shell & Utilities」から各コマンドの仕様を閲覧できます。また,コマンドだけでなく,ファイルその他の仕様も閲覧できます)
・Version 7 UNIXのsh(1)に一番近いのはOpenSolaris由来のHeirloom sh,次点でDebianなどに搭載されているDASH。
Heirloom sh: http://heirloom.sourceforge.net/sh.html
Dash shell: http://gondor.apana.org.au/~herbert/dash/
・Bourne shellの種類・歴史やシェルの挙動とかいろいろ詳しいサイト: https://www.in-ulm.de/~mascheck/
・Unixにはシェルスクリプトに便利な小さなコマンド類がいろいろあります。
「並び換え (sort(1))」「検索 (grep(1))」等々。
Manページや各種リンク(http://pubs.opengroup.org/onlinepubs/9699919799/idx/utilities.htmlなど)を見ましょう。
apropos(1)ないしはman(1)の-kオプションでそれらしい単語による簡単な検索もできます。
・ワイルドカードは正規表現ではありません。
正規表現の話題はスレ違い(正規表現スレへ)
・シェルスクリプトのことをシェルってゆうな
2019/07/02(火) 00:29:24.94ID:rBxHnYzF
↑一個のスレに収まるギリギリ……。
2019/07/02(火) 05:21:24.78ID:uO4UDEG+
なんかどうも理解してないようだから、続きのひとレス
動くかどうかの問題無いじゃないんだよ。cat 以後の cat の出力に対してのという表記に見えるのが好みじゃないってとこなんだよ。わかるかなあ?
例で cat | while でやることと、前処理と前処理の調整は別のもん。なのにってとこだよ。そこが無理してんなということだよ。わかるかなあ?まあ、わからんだろうけど
そういう「俺の好み」からはナイなということだよ。言ってもわからんだろうけど、いちおう最後にということで
動くかどうかの問題無いじゃないんだよ。cat 以後の cat の出力に対してのという表記に見えるのが好みじゃないってとこなんだよ。わかるかなあ?
例で cat | while でやることと、前処理と前処理の調整は別のもん。なのにってとこだよ。そこが無理してんなということだよ。わかるかなあ?まあ、わからんだろうけど
そういう「俺の好み」からはナイなということだよ。言ってもわからんだろうけど、いちおう最後にということで
2019/07/02(火) 05:29:38.90ID:Atdu9zIi
明確な理由がなくて、単に好みとだけ言ってたら
賛同を得られないのは当たり前。
bashはだめだよ。好みじゃないもの(笑)
賛同を得られないのは当たり前。
bashはだめだよ。好みじゃないもの(笑)
2019/07/02(火) 05:31:07.65ID:Atdu9zIi
変数のスコープを考えろって話だ。
前処理だろうが、後処理だろうが、
変数を参照するならば、同じ階層(かそれ以下)でなければならない。
関数の外で、関数内の変数を参照しようっていうのがそもそも間違い。
前処理だろうが、後処理だろうが、
変数を参照するならば、同じ階層(かそれ以下)でなければならない。
関数の外で、関数内の変数を参照しようっていうのがそもそも間違い。
2019/07/02(火) 05:34:16.34ID:Atdu9zIi
例えば、
hoge=0 # ← ==== ここで変数定義 ==== ・・・ (A)
while IFS= read -r line; do
[ なにか ] && hoge=1
ほかにいろいろ
done < <(cat)
if [ hoge = 0 ]; then # ← ==== ここで使用してる ====・・・ (B)
前処理の調整
else
前処理の調整
fi
というコードの場合、少なくともAからBの間は
同一スコープ(=サブシェル ≒ 関数)内になければいけない
関数内で定義したローカル変数は、関数内でしか参照できないのと一緒。
これぐらいはすぐに理解しよう。
hoge=0 # ← ==== ここで変数定義 ==== ・・・ (A)
while IFS= read -r line; do
[ なにか ] && hoge=1
ほかにいろいろ
done < <(cat)
if [ hoge = 0 ]; then # ← ==== ここで使用してる ====・・・ (B)
前処理の調整
else
前処理の調整
fi
というコードの場合、少なくともAからBの間は
同一スコープ(=サブシェル ≒ 関数)内になければいけない
関数内で定義したローカル変数は、関数内でしか参照できないのと一緒。
これぐらいはすぐに理解しよう。
2019/07/02(火) 05:38:13.57ID:Atdu9zIi
関数の中で、前処理、後処理(前処理の調整)を
したくないっていうのなら、こうなる。
foo() {
hoge=0
while IFS= read -r line; do
[ なにか ] && hoge=1
ほかにいろいろ
done
[ hoge = 0 ]
}
前処理
if cat | foo; then
前処理の調整
else
前処理の調整
fi
これはもうシェルスクリプトがどうとかいうんじゃなくて、
個人のプログラミング技術レベルの問題
まともな設計能力があればできること
ワンライナーとかシェル芸とかばっかりやってると
こういうプログラミング能力が身につかないのかもなw
したくないっていうのなら、こうなる。
foo() {
hoge=0
while IFS= read -r line; do
[ なにか ] && hoge=1
ほかにいろいろ
done
[ hoge = 0 ]
}
前処理
if cat | foo; then
前処理の調整
else
前処理の調整
fi
これはもうシェルスクリプトがどうとかいうんじゃなくて、
個人のプログラミング技術レベルの問題
まともな設計能力があればできること
ワンライナーとかシェル芸とかばっかりやってると
こういうプログラミング能力が身につかないのかもなw
2019/07/02(火) 05:38:23.13ID:uO4UDEG+
別にそれでいいよ。別に俺はあなたにそう使うなとは言ってないし、bashのを使えとも言ってないけど?どう書くのかなあと聞いただけだよ、理解してお礼も言っているのにw
あなたが根本的に勘違いしているのは自分は正しい他は間違いってとこだね。賛同とかw別にあなたに賛同を求めてはいないよ?はなから。
>>9は無茶苦茶。なにかひどく後で出た巻数にすればいいに自信を持っているように見えるんだが、勝手にいろいろ妄想しすぎです
なんか異常に自分は正しいに拘るのね。わからん
あなたが根本的に勘違いしているのは自分は正しい他は間違いってとこだね。賛同とかw別にあなたに賛同を求めてはいないよ?はなから。
>>9は無茶苦茶。なにかひどく後で出た巻数にすればいいに自信を持っているように見えるんだが、勝手にいろいろ妄想しすぎです
なんか異常に自分は正しいに拘るのね。わからん
2019/07/02(火) 05:40:12.69ID:rBxHnYzF
>>7
正直,お前の好みと可搬性だったら可搬性を優先するわ。
正直,お前の好みと可搬性だったら可搬性を優先するわ。
2019/07/02(火) 05:41:35.09ID:Atdu9zIi
>>12
お前なんの話してるの?
POSIX準拠だとサブシェルの中で変数を書き換えられないって
言ってたから、正しいプログラミングをすれば、それは問題にならないって
実例を上げて説明したんだが?
で、お礼も言わずに「俺の好みじゃない」と言ってるだけじゃん
お前なんの話してるの?
POSIX準拠だとサブシェルの中で変数を書き換えられないって
言ってたから、正しいプログラミングをすれば、それは問題にならないって
実例を上げて説明したんだが?
で、お礼も言わずに「俺の好みじゃない」と言ってるだけじゃん
2019/07/02(火) 05:41:58.38ID:uO4UDEG+
うわっ。なんか他の言語で当たり前の事をながーく書いてるねえ
他の言語と同じように書けるっぽいのがbashの方だと思うんだけどねえ
>>7で書いた通りのままだな。やっぱりわかってないようだし、コロコロ表記変わるよりは、bashのでのほうが変わらない普遍的だなというw結論で、俺は納得しておしまい
他の言語と同じように書けるっぽいのがbashの方だと思うんだけどねえ
>>7で書いた通りのままだな。やっぱりわかってないようだし、コロコロ表記変わるよりは、bashのでのほうが変わらない普遍的だなというw結論で、俺は納得しておしまい
2019/07/02(火) 05:42:48.48ID:Atdu9zIi
>>15
中身のないレスするなよw
中身のないレスするなよw
2019/07/02(火) 05:42:53.77ID:rBxHnYzF
[[ "$VAR" =~ '<regexp>' ]]
↓
expr "$VAR" : '<regexp>'
for ((i=0;16>i;i++)) ; do
echo $i
done
↓
i=0; while [ $i -lt 16 ]; do
echo $i
i=$((i+1)); done
ていうか >>11 あたりの「自分の好み」じゃなくて「POSIX規格」に基づいて考えを述べてくれる人に聞きたいんだけど
俺の↑この下段のシェルスクリプトって上段のシェルスクリプトと同じ動きをして,かつPOSIXに準拠してるよね。
何か問題があればツッコんで欲しい(自分では上手くいくと思っているので)。
↓
expr "$VAR" : '<regexp>'
for ((i=0;16>i;i++)) ; do
echo $i
done
↓
i=0; while [ $i -lt 16 ]; do
echo $i
i=$((i+1)); done
ていうか >>11 あたりの「自分の好み」じゃなくて「POSIX規格」に基づいて考えを述べてくれる人に聞きたいんだけど
俺の↑この下段のシェルスクリプトって上段のシェルスクリプトと同じ動きをして,かつPOSIXに準拠してるよね。
何か問題があればツッコんで欲しい(自分では上手くいくと思っているので)。
2019/07/02(火) 05:42:58.59ID:uO4UDEG+
>>14
俺の最初のレスをよく読もうな。そしてお礼を言ったレスもよく読もうな
俺の最初のレスをよく読もうな。そしてお礼を言ったレスもよく読もうな
2019/07/02(火) 05:43:26.93ID:Atdu9zIi
やっぱりわかってない → 何がわかってないのか? → 何も言わずにまた逃げる
このパターンなんだよなw
このパターンなんだよなw
2019/07/02(火) 05:43:51.62ID:Atdu9zIi
>>18
もってこいや
もってこいや
2019/07/02(火) 05:44:48.28ID:Atdu9zIi
2019/07/02(火) 05:45:16.64ID:uO4UDEG+
まあ...なんだな自分の世界で生きている人だな。そんなにレス書けているんだから読むくらいできるでしょwすげえな
2019/07/02(火) 05:48:48.18ID:p7jTc1Zw
bashで書いた好みのスクリプト見せてください!
2019/07/02(火) 05:49:21.91ID:uO4UDEG+
2019/07/02(火) 05:52:54.65ID:rBxHnYzF
あたりまえの事言われてるのにショック受けててかわいい
2019/07/02(火) 05:55:02.13ID:uO4UDEG+
ちょっとキモいっす。あなたにとってあたりまえでしょ>>17と勧めた人だもの
2019/07/02(火) 05:58:21.90ID:rBxHnYzF
>>21
なるほど……。
あんたもレスしてたけど
シェルスクリプトにおける変数のスコープってC言語やJavaScriptなんかとほぼ変わらない規則だよね。
「POSIXに準拠したシェルスクリプトは『普遍的』じゃない」っていう主張と矛盾してるよなw
なるほど……。
あんたもレスしてたけど
シェルスクリプトにおける変数のスコープってC言語やJavaScriptなんかとほぼ変わらない規則だよね。
「POSIXに準拠したシェルスクリプトは『普遍的』じゃない」っていう主張と矛盾してるよなw
2019/07/02(火) 06:01:36.34ID:Atdu9zIi
シェルスクリプトにはPOSIXの範囲ではグローバル変数しか無いけれど
(localやtypesetはPOSIXではない)
サブシェルまで考えると、ローカル変数として使えるんだよな。
よく考えられた言語だと思うよ。
(localやtypesetはPOSIXではない)
サブシェルまで考えると、ローカル変数として使えるんだよな。
よく考えられた言語だと思うよ。
2019/07/02(火) 06:03:41.58ID:uO4UDEG+
プロセスが別だからというだけだけどね。よくは考えてないだろう
2019/07/02(火) 06:05:53.06ID:rBxHnYzF
ID: uO4UDEG+の主張をなるべく中立的に列挙してみる。
・「自分が好きな書き方」のシェルスクリプトがある。
・それを人に強制する気はない。
↑これで合ってるよね。
ただ自分がこの人に賛同できない点は二つあって
1. 肝心の「自分が好きな書き方」の規則や具体例をほとんど挙げていない。
例えば「サブシェルをできれば使いたくない」とかそういう好みを言わずに,
人が書いたシェルスクリプトを「これは自分の好みに合わない」って言ってる。
2. 規格に準拠した書き方と「自分が好きな書き方」が同等の立場にあると思っている。
これは賛否あるかも知れないけど,好みの書き方が規格に準じてなかった場合,
大抵の人はそのプログラムを規格に準じた書き方に直すと思う。
たとえその書き方が嫌いだったとしても。
・「自分が好きな書き方」のシェルスクリプトがある。
・それを人に強制する気はない。
↑これで合ってるよね。
ただ自分がこの人に賛同できない点は二つあって
1. 肝心の「自分が好きな書き方」の規則や具体例をほとんど挙げていない。
例えば「サブシェルをできれば使いたくない」とかそういう好みを言わずに,
人が書いたシェルスクリプトを「これは自分の好みに合わない」って言ってる。
2. 規格に準拠した書き方と「自分が好きな書き方」が同等の立場にあると思っている。
これは賛否あるかも知れないけど,好みの書き方が規格に準じてなかった場合,
大抵の人はそのプログラムを規格に準じた書き方に直すと思う。
たとえその書き方が嫌いだったとしても。
2019/07/02(火) 06:08:36.27ID:rBxHnYzF
>>28
Bashとかだとわざわざlocalっていう新しい予約語を用意してるけど
正直無駄っちゃ無駄よね。
POSIX準拠のシェルスクリプトでもほぼ可読性を損なわずに局所変数が定義できるから。
ところでBashの拡張機能で素晴しいと思うのは配列だね。
これはPOSIXに準じたシェルスクリプトではなかなか実現できない。
実現できたとしても大抵は複雑奇怪でデバックも地獄。
Bashとかだとわざわざlocalっていう新しい予約語を用意してるけど
正直無駄っちゃ無駄よね。
POSIX準拠のシェルスクリプトでもほぼ可読性を損なわずに局所変数が定義できるから。
ところでBashの拡張機能で素晴しいと思うのは配列だね。
これはPOSIXに準じたシェルスクリプトではなかなか実現できない。
実現できたとしても大抵は複雑奇怪でデバックも地獄。
2019/07/02(火) 06:09:34.19ID:uO4UDEG+
forkはプロセスのコピーなので、親プロセスの変数なんぞはそのまま使える。だがしかし返すことや親プロセスの変数を変えることはできません
ってだけだね、確か
>>30
1.すでに言ってるけどなあ。最初から言えっていう?bashでのスッキリした書き方がわかっているもんだと思ったから
2.「同等の立場」とか何言っているのかわからん。どこでも誰でもPOSIXでなければならないとか言ってないでしょ?何を言っているのかわからん。bashでいいならbashを使ったそれに準じたでいいでしょね
ってだけだね、確か
>>30
1.すでに言ってるけどなあ。最初から言えっていう?bashでのスッキリした書き方がわかっているもんだと思ったから
2.「同等の立場」とか何言っているのかわからん。どこでも誰でもPOSIXでなければならないとか言ってないでしょ?何を言っているのかわからん。bashでいいならbashを使ったそれに準じたでいいでしょね
2019/07/02(火) 06:10:40.06ID:uO4UDEG+
2019/07/02(火) 06:13:15.11ID:rBxHnYzF
>>33
「矛盾している」という指摘を「揶揄」と捉えてしまうような人とはお話できませんね……。
「矛盾している」という指摘を「揶揄」と捉えてしまうような人とはお話できませんね……。
2019/07/02(火) 06:16:38.40ID:uO4UDEG+
>>34
その「矛盾している」という元はなんだったのか自分の書いたレスをよく読んできてね(そもそも普遍的でないは別にスコープとは無関係なことでなのに急にという)
スコープがPOSIXでは無かったら、bashでできるようなのは無駄とか言っちゃってるんですけど?ちょっと酷すぎね?w
その「矛盾している」という元はなんだったのか自分の書いたレスをよく読んできてね(そもそも普遍的でないは別にスコープとは無関係なことでなのに急にという)
スコープがPOSIXでは無かったら、bashでできるようなのは無駄とか言っちゃってるんですけど?ちょっと酷すぎね?w
2019/07/02(火) 06:19:02.38ID:rBxHnYzF
>>32
> どこでも誰でもPOSIXでなければならないとか言ってないでしょ
いや,今回に限ればそれは違う。
https://mevius.5ch.net/test/read.cgi/tech/1537540487/962
でPOSIXでの書き方を訊いた人がいて,それに関して
https://mevius.5ch.net/test/read.cgi/tech/1537540487/971
を提示すると
https://mevius.5ch.net/test/read.cgi/tech/1537540487/972
でID:uO4UDEG+が「その書き方は嫌いだ」という主張をしている。
つまりID:uO4UDEG+は少なくとも前スレ972においては
「POSIXに準じた書き方」と「自分が好きな書き方」を比較している。
たとえ無意識的だったとしても,たった2つ前のスレを読んでさえいれば
前スレ971で(俺が)提示したシェルスクリプトがPOSIX準拠を念頭に置いて書いたものだと分かる筈。
> どこでも誰でもPOSIXでなければならないとか言ってないでしょ
いや,今回に限ればそれは違う。
https://mevius.5ch.net/test/read.cgi/tech/1537540487/962
でPOSIXでの書き方を訊いた人がいて,それに関して
https://mevius.5ch.net/test/read.cgi/tech/1537540487/971
を提示すると
https://mevius.5ch.net/test/read.cgi/tech/1537540487/972
でID:uO4UDEG+が「その書き方は嫌いだ」という主張をしている。
つまりID:uO4UDEG+は少なくとも前スレ972においては
「POSIXに準じた書き方」と「自分が好きな書き方」を比較している。
たとえ無意識的だったとしても,たった2つ前のスレを読んでさえいれば
前スレ971で(俺が)提示したシェルスクリプトがPOSIX準拠を念頭に置いて書いたものだと分かる筈。
2019/07/02(火) 06:22:13.76ID:uO4UDEG+
2019/07/02(火) 06:26:43.80ID:Atdu9zIi
2019/07/02(火) 06:28:53.26ID:uO4UDEG+
>>38
そういう場合は変えられるんじゃないの?でないと、わざわざメモリガードというか別メモリを用意してとかめんど臭いことしなきゃならないだろうね
そういう場合は変えられるんじゃないの?でないと、わざわざメモリガードというか別メモリを用意してとかめんど臭いことしなきゃならないだろうね
2019/07/02(火) 06:30:42.30ID:Atdu9zIi
>>31
配列が出てくるのはシェルスクリプトのプログラミングスタイルがわかってないんだと思う。
一行一データで行指向で処理するのがシェルスクリプトだから
ツリー構造のデータにRDBMSを使うようなもん
配列が出てくるのはシェルスクリプトのプログラミングスタイルがわかってないんだと思う。
一行一データで行指向で処理するのがシェルスクリプトだから
ツリー構造のデータにRDBMSを使うようなもん
2019/07/02(火) 06:32:49.73ID:Atdu9zIi
>>39
> そういう場合は変えられるんじゃないの?
主語をはっきりさせろ。誰にも伝わらん。
> わざわざメモリガードというか別メモリを用意してとかめんど臭いことしなきゃならないだろうね
だからkshは面倒くさいことをして
(特定の条件を満たす限り)サブシェルを別プロセスにしてない。
そういうことをしてOKだし、そういうことを想定してるから、
サブプロセスではなくサブシェルという別の言葉を作ってる
> そういう場合は変えられるんじゃないの?
主語をはっきりさせろ。誰にも伝わらん。
> わざわざメモリガードというか別メモリを用意してとかめんど臭いことしなきゃならないだろうね
だからkshは面倒くさいことをして
(特定の条件を満たす限り)サブシェルを別プロセスにしてない。
そういうことをしてOKだし、そういうことを想定してるから、
サブプロセスではなくサブシェルという別の言葉を作ってる
2019/07/02(火) 06:36:07.29ID:rBxHnYzF
>>40
まあ,そう言われればそうだな。
俺も,シェルスクリプト大好きですみたいな雰囲気のくせして,
シェルスクリプトで面倒な操作が要求されるような場合は
すぐにC#やPython3に浮気するからなw
まあ,そう言われればそうだな。
俺も,シェルスクリプト大好きですみたいな雰囲気のくせして,
シェルスクリプトで面倒な操作が要求されるような場合は
すぐにC#やPython3に浮気するからなw
2019/07/02(火) 06:36:08.06ID:uO4UDEG+
>>41
サブシェルが別プロセスでない場合だよ。プロセスが別かどうかの話なんだからわかるかと思ったけどなあ
ということは、同一プロセスでも変えられないのね。「ksh」はそこは「よく考えるんだな」と言えるでしょうね。なんでまたとも思うけど。古のshは別プロセスの方だろうと思うけどどうだろう
サブシェルが別プロセスでない場合だよ。プロセスが別かどうかの話なんだからわかるかと思ったけどなあ
ということは、同一プロセスでも変えられないのね。「ksh」はそこは「よく考えるんだな」と言えるでしょうね。なんでまたとも思うけど。古のshは別プロセスの方だろうと思うけどどうだろう
2019/07/02(火) 06:37:14.94ID:Atdu9zIi
>>43
だから、何を何に「変えられる」のか言えって
だから、何を何に「変えられる」のか言えって
2019/07/02(火) 06:38:46.75ID:rBxHnYzF
>>37
別に俺はPOSIX第一主義でもなんでもない。
というかPOSIXに従わないという明確な方針があるならそれはそれでいいとさえ思ってる
(あまり賛同しずらいけど)。
ただし今回はPOSIXに準拠したものと「同等の」シェルスクリプトを書く話だから
俺はPOSIX規格を持ち出してきてる訳。
別に俺はPOSIX第一主義でもなんでもない。
というかPOSIXに従わないという明確な方針があるならそれはそれでいいとさえ思ってる
(あまり賛同しずらいけど)。
ただし今回はPOSIXに準拠したものと「同等の」シェルスクリプトを書く話だから
俺はPOSIX規格を持ち出してきてる訳。
2019/07/02(火) 06:39:59.55ID:uO4UDEG+
2019/07/02(火) 06:41:23.10ID:rBxHnYzF
しっかし……なんでそう極端にしかモノを考えられないのかね。
たぶん,彼が想像する世界には「POSIX絶対!」っていう人と「Bashizm最高!」っていう人の二種類しか存在しないのかもw
だってそうじゃなきゃ(限定的に)POSIXの話をしている中に割って入って「POSIX第一主義だ」なんて言えないもん。
(というかそういう発想がまず出てこないw)
たぶん,彼が想像する世界には「POSIX絶対!」っていう人と「Bashizm最高!」っていう人の二種類しか存在しないのかもw
だってそうじゃなきゃ(限定的に)POSIXの話をしている中に割って入って「POSIX第一主義だ」なんて言えないもん。
(というかそういう発想がまず出てこないw)
2019/07/02(火) 06:41:51.94ID:uO4UDEG+
2019/07/02(火) 06:44:53.65ID:Atdu9zIi
POSIXシェルの範囲でできることなんだから、POSIX準拠でいいやん
これだけだろ。
POSIX準拠じゃできないことならまだしも、
POSIX準拠でできるならPOSIX準拠で作ってりゃ可搬性も有るし。
必要もないのに [[ ]] を使うやつ多すぎ
これだけだろ。
POSIX準拠じゃできないことならまだしも、
POSIX準拠でできるならPOSIX準拠で作ってりゃ可搬性も有るし。
必要もないのに [[ ]] を使うやつ多すぎ
2019/07/02(火) 06:45:12.79ID:uO4UDEG+
2019/07/02(火) 06:46:27.41ID:uO4UDEG+
>>49
そゆとこだよ、あなたの悪いwとこは。やっぱり自分が正しく他の人の好みは認めんってだけやん
そゆとこだよ、あなたの悪いwとこは。やっぱり自分が正しく他の人の好みは認めんってだけやん
2019/07/02(火) 06:47:02.37ID:rBxHnYzF
>>48
元の人というのはID:Tm8GOmHyだよな。
この人物のその後の発言は
https://mevius.5ch.net/test/read.cgi/tech/1537540487/967
しかないのだが,ここから
「POSIXと『同等』のシェルスクリプトというのは
POSIX規格に準拠したシェルスクリプトのことではない」
という主張は俺にはどうしても読み取れんな……。
元の人というのはID:Tm8GOmHyだよな。
この人物のその後の発言は
https://mevius.5ch.net/test/read.cgi/tech/1537540487/967
しかないのだが,ここから
「POSIXと『同等』のシェルスクリプトというのは
POSIX規格に準拠したシェルスクリプトのことではない」
という主張は俺にはどうしても読み取れんな……。
2019/07/02(火) 06:48:07.81ID:Atdu9zIi
>>51
そういうとこな(笑)
そういうとこな(笑)
2019/07/02(火) 06:48:23.35ID:Atdu9zIi
>>51
お前のことやで。そういうとこ。
お前のことやで。そういうとこ。
2019/07/02(火) 06:49:02.19ID:rBxHnYzF
2019/07/02(火) 06:49:41.71ID:rBxHnYzF
2019/07/02(火) 06:49:42.46ID:uO4UDEG+
2019/07/02(火) 06:49:55.77ID:Atdu9zIi
「POSIX準拠でいいやん」という意見を認めたくないんだろうね(笑)
2019/07/02(火) 06:50:40.47ID:rBxHnYzF
>>57
すいません,ここでの「『同等』の意味」を教えていただけますか。
すいません,ここでの「『同等』の意味」を教えていただけますか。
2019/07/02(火) 06:50:44.84ID:Atdu9zIi
2019/07/02(火) 06:53:34.64ID:uO4UDEG+
>>53-55
あなたたちとの違いは、
>必要もないのに [[ ]] を使うやつ多すぎ
とかいうのと同じようなこと言ってないよ。俺は別にあなたにPOSIXにこだわって書くなとは言ってないよ?好きにすればだよ
あなたのこの言葉はそれと同じとでも言うの?
なんであなたの好みを他人に押し付けるの?なにか意味あんのそれ?
あなたたちとの違いは、
>必要もないのに [[ ]] を使うやつ多すぎ
とかいうのと同じようなこと言ってないよ。俺は別にあなたにPOSIXにこだわって書くなとは言ってないよ?好きにすればだよ
あなたのこの言葉はそれと同じとでも言うの?
なんであなたの好みを他人に押し付けるの?なにか意味あんのそれ?
2019/07/02(火) 06:55:55.49ID:uO4UDEG+
2019/07/02(火) 07:08:42.17ID:rBxHnYzF
>>62
あーなるほど。
Bashの独自文法で書いたシェルスクリプトと限りなく同じ見た目のものを要求してた訳か……。
うーん。これには助けにならないな。
少なくとも俺はPOSIXに準じつつかつfor (())文みたいな「見た目」のシェルスクリプトを書けない。
あーなるほど。
Bashの独自文法で書いたシェルスクリプトと限りなく同じ見た目のものを要求してた訳か……。
うーん。これには助けにならないな。
少なくとも俺はPOSIXに準じつつかつfor (())文みたいな「見た目」のシェルスクリプトを書けない。
2019/07/02(火) 07:09:11.44ID:uO4UDEG+
ああ、ああしろとは言ってるな「好みを押し付けるんじゃねえ」とw
2019/07/02(火) 07:09:48.34ID:rBxHnYzF
>>63
sed -e 's/助けにならない/助けになれない/'
sed -e 's/助けにならない/助けになれない/'
2019/07/02(火) 07:10:52.83ID:uO4UDEG+
>>63
ご理解いただけて嬉しい限りでございます。彼の本音とかわからんけどねw
ご理解いただけて嬉しい限りでございます。彼の本音とかわからんけどねw
2019/07/02(火) 07:14:40.86ID:Atdu9zIi
全く同じじゃないとだめとかアホだろw
同等のコードがかければ問題ない。
同等のコードがかければ問題ない。
2019/07/02(火) 07:17:16.38ID:uO4UDEG+
好みを押し付けるんじゃねえ
って繰り返すだけだな、もうwアホとか馬鹿にしなきゃならないほどのあんたの心理がわからん
って繰り返すだけだな、もうwアホとか馬鹿にしなきゃならないほどのあんたの心理がわからん
2019/07/02(火) 07:42:13.15ID:Atdu9zIi
>>63
> 少なくとも俺はPOSIXに準じつつかつfor (())文みたいな「見た目」のシェルスクリプトを書けない。
ほらよ。関数を作ってPOSIX準拠でコレが動くようにしたで。これなら満足やろ?
forloop i=0 'i < 2' i+=1; do
forloop j=0 'j < 10' j+=2; do
echo "$i $j"
done
done
出力結果
0 0
0 2
0 4
0 6
0 8
1 0
1 2
1 4
1 6
1 8
forloop の実装はお昼ごろ公開(笑)
> 少なくとも俺はPOSIXに準じつつかつfor (())文みたいな「見た目」のシェルスクリプトを書けない。
ほらよ。関数を作ってPOSIX準拠でコレが動くようにしたで。これなら満足やろ?
forloop i=0 'i < 2' i+=1; do
forloop j=0 'j < 10' j+=2; do
echo "$i $j"
done
done
出力結果
0 0
0 2
0 4
0 6
0 8
1 0
1 2
1 4
1 6
1 8
forloop の実装はお昼ごろ公開(笑)
2019/07/02(火) 07:59:30.87ID:rBxHnYzF
71デフォルトの名無しさん
2019/07/02(火) 09:02:17.46ID:QDdew1lC まとめるとどこでも動くシェルスクリプトなんて都市伝説ってことだね。
だってめんどくさすぎるもん。
普通に書いたらその実質環境専用。
だってめんどくさすぎるもん。
普通に書いたらその実質環境専用。
2019/07/02(火) 09:04:33.59ID:rBxHnYzF
そういうことにしたいのなら、そうなんでしょうね。
2019/07/02(火) 09:18:25.84ID:p7jTc1Zw
POSIX原理主義的にはアウトなんだろうけど
俺なら素直にseq使うな
for i in `seq 0 1`; do
for j in `seq 0 2 9`; do
echo "$i $j"
done
done
俺なら素直にseq使うな
for i in `seq 0 1`; do
for j in `seq 0 2 9`; do
echo "$i $j"
done
done
2019/07/02(火) 09:24:30.73ID:TPa3Dzqe
仮定の話として、
bashのがPOSIX規格に入ったとして、方々の環境で使えるようになったとしても、
それを使わずに独特なあんなのを書くのだろうか?
bashのがPOSIX規格に入ったとして、方々の環境で使えるようになったとしても、
それを使わずに独特なあんなのを書くのだろうか?
2019/07/02(火) 09:38:35.04ID:NGgK0zPR
修羅の道
2019/07/02(火) 09:42:44.56ID:p7jTc1Zw
慣れの問題じゃないかな
人間は最初に覚えたものを正しいとする傾向があるからね
人間は最初に覚えたものを正しいとする傾向があるからね
2019/07/02(火) 10:12:37.42ID:K9FUvK74
2019/07/02(火) 10:27:34.91ID:p7jTc1Zw
2019/07/02(火) 10:33:48.48ID:K9FUvK74
2019/07/02(火) 10:36:47.73ID:uMGeffjZ
bash のfor ループで、5分ぐらい掛かるものが、
awk, Perl, Ruby などでは数秒以内
dash なら、まだマシ
awk, Perl, Ruby などでは数秒以内
dash なら、まだマシ
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 今年の漢字 [ぐれ★]
- 【おこめ券】物価高対策の“おこめ券”全米販は1枚477円で販売へ 鈴木農水大臣「国民の皆様に活用いただきやすいよう工夫いただいた」★2 [ぐれ★]
- 【麻雀】プロ雀士の岡田紗佳さんが勝訴、点数計算めぐる発言は「違法とは言えず」 大宮簡裁 [征夷大将軍★]
- 高市首相の答弁書に「台湾有事答えない」と明記 存立危機発言当時 ★5 [蚤の市★]
- ミス・ユニバース フィンランド代表の「つり目」写真が波紋… 本人釈明も批判やまず 協会謝罪「徹底的に検証」へ★3 [冬月記者★]
- ハリウッド実写版『ストリートファイター』初映像解禁 リュウ&春麗らのビジュアルも公開 [muffin★]
- 虫歯の味ってわかるよね
- 参政党議員「クジラの肉を食べないのは流通や販路に問題があるからだよね?」 [592058334]
- 【超速報】自転車がパンクした・・・・・・・・・・・・ [793051416]
- (´・ω・`)日本がするべき政策
- __トランプ、G7に代わる「Core 5」構想、米 中 露 印 日をまとめる巨大枠組み、世界秩序の再編につながる可能性 [827565401]
- VTuber叩きが大流行してる理由、1枚の画像で解説される…!! [858219337]
