シェルスクリプトに関する総合スレッドです。
全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。
前スレ:
シェルスクリプト総合 その29
https://mevius.5ch.net/test/read.cgi/tech/1537540487/
探検
シェルスクリプト総合 その30
レス数が1000を超えています。これ以上書き込みはできません。
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 なら、まだマシ
2019/07/02(火) 10:38:10.41ID:9kNMjoh/
また原理主義者が跳梁跋扈しているのか
2019/07/02(火) 10:38:45.33ID:K9FUvK74
× bash のfor ループで、5分ぐらい掛かるものが、
○ bash のfor ループで大量に外部プロセス呼び出ししたから5分ぐらい掛かる。俺ってなんて馬鹿だろう
○ bash のfor ループで大量に外部プロセス呼び出ししたから5分ぐらい掛かる。俺ってなんて馬鹿だろう
2019/07/02(火) 13:09:34.12ID:+S00pq20
では>>69の解答(こんなコード書かないで普通にwhile使うわw)
iterator() {
case $iterator in
?) eval ": \$(($3)); [ \$(($2)) = 1 ]" ;;
*) eval ": \$(($1)); iterator=1" ;;
esac
}
alias forloop="iterator=; while iterator"
forloop i=0 'i < 2' i+=1; do
forloop j=0 'j < 10' j+=2; do
echo "$i $j"
done
done
iterator() {
case $iterator in
?) eval ": \$(($3)); [ \$(($2)) = 1 ]" ;;
*) eval ": \$(($1)); iterator=1" ;;
esac
}
alias forloop="iterator=; while iterator"
forloop i=0 'i < 2' i+=1; do
forloop j=0 'j < 10' j+=2; do
echo "$i $j"
done
done
2019/07/02(火) 13:10:15.61ID:+S00pq20
あ、bashの場合のコード忘れてたw
[ "${BASH_VERSION:-}" ] && shopt -s expand_aliases
[ "${BASH_VERSION:-}" ] && shopt -s expand_aliases
85デフォルトの名無しさん
2019/07/02(火) 13:12:43.38ID:NqAwj9wC やっぱりどこでも動くシェルスクリプトなんて現実的じゃないね。
2019/07/02(火) 16:30:08.56ID:rBxHnYzF
そういうことにしたいのなら、そうなんでしょうね。
2019/07/02(火) 16:35:31.23ID:rBxHnYzF
>>74
そんな訳なくね?
だってBashの構文がPOSIX規格に採用されたということは
「好みの」問題でBashの構文を書いたとしてもどこでも動くシェルスクリプトが書ける訳でしょ。
俺はどーでもいいけどBashの構文を書きたい&&POSIXに準拠したい人は,
当然Bashの構文で書くようになるだろうね。
そんな訳なくね?
だってBashの構文がPOSIX規格に採用されたということは
「好みの」問題でBashの構文を書いたとしてもどこでも動くシェルスクリプトが書ける訳でしょ。
俺はどーでもいいけどBashの構文を書きたい&&POSIXに準拠したい人は,
当然Bashの構文で書くようになるだろうね。
2019/07/02(火) 17:50:15.63ID:2TyYMhHV
いやらしい無理してのレスだな
2019/07/02(火) 18:50:36.28ID:p7jTc1Zw
POSIX準拠コマンドの選定基準ってあるのかね
seqのないシステムなんて見たことないんだけどな
seqのないシステムなんて見たことないんだけどな
2019/07/02(火) 19:14:34.05ID:fp/AcynX
https://en.wikipedia.org/wiki/Seq_(Unix)
らしい
らしい
2019/07/02(火) 19:40:34.32ID:p7jTc1Zw
BSD, GNU系だからってことか
でも Solaris(SYSV系)にも入ってたはずだけどな
選定基準はBSDとSYSVの共通項とる感じなのかね
でも Solaris(SYSV系)にも入ってたはずだけどな
選定基準はBSDとSYSVの共通項とる感じなのかね
2019/07/02(火) 20:08:50.12ID:fp/AcynX
seqは初期のUnixの頃にはいらない子だったんだなと
https://en.wikipedia.org/wiki/List_of_Unix_commands
コマンド初出元は方々だね、基準がわからない。お話し合いでじゃないのかな
trは不人気もありお話し合いで上がらないか却下とか
https://en.wikipedia.org/wiki/List_of_Unix_commands
コマンド初出元は方々だね、基準がわからない。お話し合いでじゃないのかな
trは不人気もありお話し合いで上がらないか却下とか
2019/07/02(火) 20:19:23.81ID:p7jTc1Zw
なるほどね
そろそろ改定してもいいんじゃないって思うな
今どき SCCSなんて使ってないでしょw
そろそろ改定してもいいんじゃないって思うな
今どき SCCSなんて使ってないでしょw
2019/07/02(火) 20:28:41.77ID:fp/AcynX
>trは不人気もあり
seqは不人気もありの間違い
なんか今でもコマンドの内容については議論しているようだけどね。コマンドの選定とかもあるかな。議論を見ると時間がかかるのが明らかだけど
seqは不人気もありの間違い
なんか今でもコマンドの内容については議論しているようだけどね。コマンドの選定とかもあるかな。議論を見ると時間がかかるのが明らかだけど
2019/07/02(火) 21:31:39.81ID:rBxHnYzF
2019/07/02(火) 23:55:56.36ID:rBxHnYzF
2019/07/03(水) 00:36:59.38ID:1lX/P2wW
>>96
whileループが1回目の場合にループ変数に初期値の設定、それ以外は加算する必要がある。
だからループの1回目かそれ以外の区別する必要があるんだけど、他にいい方法が思いつかなかった。
見た目まで合わせようとするとこうなるかなと
ま、普通にwhile使えばいいんで、こんな事しないけどねw
whileループが1回目の場合にループ変数に初期値の設定、それ以外は加算する必要がある。
だからループの1回目かそれ以外の区別する必要があるんだけど、他にいい方法が思いつかなかった。
見た目まで合わせようとするとこうなるかなと
ま、普通にwhile使えばいいんで、こんな事しないけどねw
2019/07/03(水) 01:05:12.87ID:1lX/P2wW
あとaliasを使えば、簡単な文法の変換を行えるわけだけど、
aliasを使わないならば、forloop i=0 'i < 2' i+=1; do とは書けずに、
while iterator i=0 'i < 2' i+=1; do のようにwhile と iterator の最低二つの単語が必要だろうね。
aliasを使わないならば、forloop i=0 'i < 2' i+=1; do とは書けずに、
while iterator i=0 'i < 2' i+=1; do のようにwhile と iterator の最低二つの単語が必要だろうね。
2019/07/03(水) 01:37:44.21ID:t0CPqQzZ
>>98
なるほ。ありがとう。
なるほ。ありがとう。
100デフォルトの名無しさん
2019/07/03(水) 13:08:21.29ID:R/PdF9TQ hoge.sh の中で bash hage.sh と実行した時に、なんでなにもしてないのに
hage.shの中ですでに環境変数などが設定されてるんだ?誰が設定してるんだ?って思ったら
BASH_ENVにファイル名を入れておくと、bash hage.sh実行時に
指定されたファイルを読み込むのか・・・
hage.shの中ですでに環境変数などが設定されてるんだ?誰が設定してるんだ?って思ったら
BASH_ENVにファイル名を入れておくと、bash hage.sh実行時に
指定されたファイルを読み込むのか・・・
101デフォルトの名無しさん
2019/07/03(水) 14:51:49.69ID:jC/WE6MC > hoge.sh の中で bash hage.sh と実行
素人質問で済みません、これは無限ループにならないのでしょうか?
ならないなら、どういう仕組みで阻止されてるのでしょうか
素人質問で済みません、これは無限ループにならないのでしょうか?
ならないなら、どういう仕組みで阻止されてるのでしょうか
102デフォルトの名無しさん
2019/07/03(水) 15:22:43.46ID:k7t42OM8 無限ループに条件つけて終了させればいい
どの言語でも一緒
どの言語でも一緒
103デフォルトの名無しさん
2019/07/03(水) 15:25:15.83ID:R/PdF9TQ >>101
ハゲは一人だ
ハゲは一人だ
104デフォルトの名無しさん
2019/07/03(水) 16:12:30.34ID:jC/WE6MC あー、シェルが勝手に阻止してくれるワケではないのですね...
#! /bin/sh
echo "foo!"
bash hoge.sh
これ無限ループになりました。
#! /bin/sh
echo "foo!"
bash hoge.sh
これ無限ループになりました。
105デフォルトの名無しさん
2019/07/03(水) 18:44:48.49ID:sXMtau7O >>103
誰も気づいていないみたいだよw
誰も気づいていないみたいだよw
106デフォルトの名無しさん
2019/07/03(水) 19:21:20.61ID:v/5AoTKN hoge、fuga、piyoは認めるがhageは認めんぞ
俺が禿げているって訳じゃないぞ本当だからな
俺が禿げているって訳じゃないぞ本当だからな
107デフォルトの名無しさん
2019/07/03(水) 19:25:37.57ID:XEr4jr+a うるせーハゲ
108デフォルトの名無しさん
2019/07/03(水) 19:49:42.97ID:pKA2Nnt3 )ソ)
ッλ ノ(.,ノ)
(゙- ..::.::. . (
(ソ. .彡⌒ミ. )ソ)
).::'; (´・ω・`) ス (
ソ .::;';'(つ ⊂)::;';'`〜、.
( :;';' |__∧_| ::;';' ヽ)
`'~`'''`'`'`~'~~`~~'`'`''''"`'`'`''`''''"`'``'~`''`'~`'''`'`'`~
さ あ 禿 げ 上 が っ て ま い り ま し た
ッλ ノ(.,ノ)
(゙- ..::.::. . (
(ソ. .彡⌒ミ. )ソ)
).::'; (´・ω・`) ス (
ソ .::;';'(つ ⊂)::;';'`〜、.
( :;';' |__∧_| ::;';' ヽ)
`'~`'''`'`'`~'~~`~~'`'`''''"`'`'`''`''''"`'``'~`''`'~`'''`'`'`~
さ あ 禿 げ 上 が っ て ま い り ま し た
109デフォルトの名無しさん
2019/07/03(水) 21:40:00.18ID:ehEf7ymj 禿ーゲンダッツ
110デフォルトの名無しさん
2019/07/03(水) 22:05:25.84ID:t0CPqQzZ >>101
$SHLVL変数で判定するんじゃないの?
$SHLVL変数で判定するんじゃないの?
111デフォルトの名無しさん
2019/07/03(水) 23:07:21.62ID:t0CPqQzZ ……と思ったらhogeとhageかよw
クッソwww紛らわしいメタ変数使うなw
普通hogeの次はfugaだろーがよ
クッソwww紛らわしいメタ変数使うなw
普通hogeの次はfugaだろーがよ
112デフォルトの名無しさん
2019/07/04(木) 03:34:12.16ID:KpaWo1Ff commandって便利やな。
シェルスクリプトでオーバーライドができちゃうよ
シェルスクリプトでオーバーライドができちゃうよ
113デフォルトの名無しさん
2019/07/04(木) 07:10:15.99ID:vxwYTSOB114デフォルトの名無しさん
2019/07/04(木) 09:07:36.04ID:BLb3ulq0 command て.... ググラビリティ低すぎでしょ
115デフォルトの名無しさん
2019/07/04(木) 09:37:41.63ID:vxwYTSOB116デフォルトの名無しさん
2019/07/04(木) 10:08:16.55ID:846uO/vY less より vi(/= vim) が軽いので
ページャーとしてパイプの最後に less するのとりかえる
ページャーとしてパイプの最後に less するのとりかえる
117デフォルトの名無しさん
2019/07/04(木) 10:50:19.43ID:8CMbGrkR シェルスクリプトで、実行結果にかかわらず終了コード0を先出しする書き方ってないでしょうか。
背景としては…
openvpnのServer側で、「clientが接続してきたらコマンドを実行」できるんですが、
そのコマンドの終了コードが0でないと以降の処理が進まず、接続が確立されないようなんです。
今回コマンドの目的は「SSHでclientにコマンドを送り込むスクリプト」なので、
コマンドの実行結果なんか見ないで先に接続を確立してくれないと、送り込みようがないです。
なのでopenvpn側には、スクリプトの結果にかかわらず終了コード0を先に返しておいて、
sleepを入れるなり何なりして後からSSHでコマンドを送り込みたいんですが、
/path/to/script.sh && true とか色々試してみるも、一向にスクリプト終了と見なしてもらえません。
何か方法はないでしょうか。
背景としては…
openvpnのServer側で、「clientが接続してきたらコマンドを実行」できるんですが、
そのコマンドの終了コードが0でないと以降の処理が進まず、接続が確立されないようなんです。
今回コマンドの目的は「SSHでclientにコマンドを送り込むスクリプト」なので、
コマンドの実行結果なんか見ないで先に接続を確立してくれないと、送り込みようがないです。
なのでopenvpn側には、スクリプトの結果にかかわらず終了コード0を先に返しておいて、
sleepを入れるなり何なりして後からSSHでコマンドを送り込みたいんですが、
/path/to/script.sh && true とか色々試してみるも、一向にスクリプト終了と見なしてもらえません。
何か方法はないでしょうか。
118デフォルトの名無しさん
2019/07/04(木) 10:58:34.54ID:vxwYTSOB /path/to/script.sh; true
これじゃあかんの?
これじゃあかんの?
119デフォルトの名無しさん
2019/07/04(木) 11:41:34.07ID:97ll0bAQ catとtac
lsとsl
moreとless
nanoとmicro
headとtail
こいつらみたいな言葉遊びって他にもある?
大抵は既存コマンドの改良版が対にされやすいよな
lsとsl
moreとless
nanoとmicro
headとtail
こいつらみたいな言葉遊びって他にもある?
大抵は既存コマンドの改良版が対にされやすいよな
120デフォルトの名無しさん
2019/07/04(木) 11:54:20.16ID:VX27EPul121デフォルトの名無しさん
2019/07/04(木) 12:16:55.68ID:KpaWo1Ff >>117
終了コードを先出しするの意味がわからんが、
まあ中断しないようにしたいということだとして。
まず途中で中断するのは set -e されてるから
set -e されてる状態だとコマンドの終了コードが0以外だとそこで中断されてしまう。
中断されなくする一番簡単な方法は
hige ||: ・・・終了コードが0以外でも中断せず、かつ終了コードを0にする
hige &&: ・・・終了コードが0以外でも中断せず、かつ終了コードはそのまま保持する
あと、if hige; then 〜 みたいに if や while の中に入れてもOK
if や while は、コマンドの終了コードを条件に処理を分岐するので
これらの中に入れても中断しなくなる。
終了コードを先出しするの意味がわからんが、
まあ中断しないようにしたいということだとして。
まず途中で中断するのは set -e されてるから
set -e されてる状態だとコマンドの終了コードが0以外だとそこで中断されてしまう。
中断されなくする一番簡単な方法は
hige ||: ・・・終了コードが0以外でも中断せず、かつ終了コードを0にする
hige &&: ・・・終了コードが0以外でも中断せず、かつ終了コードはそのまま保持する
あと、if hige; then 〜 みたいに if や while の中に入れてもOK
if や while は、コマンドの終了コードを条件に処理を分岐するので
これらの中に入れても中断しなくなる。
122デフォルトの名無しさん
2019/07/04(木) 12:22:58.60ID:KpaWo1Ff123デフォルトの名無しさん
2019/07/04(木) 12:29:18.19ID:vxwYTSOB124117
2019/07/04(木) 14:12:34.15ID:8CMbGrkR >>118,120
;も&もダメでした。
>>121
ちょっと理解し切れてるかわかりませんが、
;や&の代わりに||を試しても、同じ結果でした。
>>122
その接続時スクリプト実行機能で、自作スクリプトを実行しようとしているが、
自作スクリプトのexitcode 0を確認しない限り接続が確立されないので、
接続できている前提の自作スクリプトがうまく動かない、という話です。
その後、試行錯誤してうまくいったんですが、
・openvpnの接続時スクリプト1は、別のスクリプト2を&付きで実行してすぐexit 0で終了
・別のスクリプトにやりたい処理を記述、終わったらexit 0
こういう方法でした。
;も&もダメでした。
>>121
ちょっと理解し切れてるかわかりませんが、
;や&の代わりに||を試しても、同じ結果でした。
>>122
その接続時スクリプト実行機能で、自作スクリプトを実行しようとしているが、
自作スクリプトのexitcode 0を確認しない限り接続が確立されないので、
接続できている前提の自作スクリプトがうまく動かない、という話です。
その後、試行錯誤してうまくいったんですが、
・openvpnの接続時スクリプト1は、別のスクリプト2を&付きで実行してすぐexit 0で終了
・別のスクリプトにやりたい処理を記述、終わったらexit 0
こういう方法でした。
125デフォルトの名無しさん
2019/07/04(木) 14:21:40.05ID:vxwYTSOB 今さらだけどPOSIXでpushdとかって「未定義」なんだな。
つまりこれらの字句が来たとき、pushdコマンドが実行されるかもしれないと想定しなきゃいけない。
つまりこれらの字句が来たとき、pushdコマンドが実行されるかもしれないと想定しなきゃいけない。
126デフォルトの名無しさん
2019/07/04(木) 14:44:38.64ID:VFVr1rb1127デフォルトの名無しさん
2019/07/04(木) 18:16:12.18ID:KBMDzr/H128デフォルトの名無しさん
2019/07/04(木) 18:44:40.09ID:Nr3czBjG129117
2019/07/04(木) 18:54:04.40ID:8CMbGrkR130デフォルトの名無しさん
2019/07/04(木) 19:05:50.51ID:zzPJIhEP131デフォルトの名無しさん
2019/07/04(木) 19:30:11.56ID:gP3HGmG/132デフォルトの名無しさん
2019/07/04(木) 19:39:31.79ID:VX27EPul >>129
スクリプトではなく純粋にコマンドの実行=単に実行ファイルの実行とか
引数の解釈分解もopenvpnでやってるとかかな?であれば、
/bin/sh -c '/path/to/script.sh & true'
とかなんとか。書き方も違うかもしれない(' が必要なのか可能なのか、もしかしたらできないとか)
スクリプトではなく純粋にコマンドの実行=単に実行ファイルの実行とか
引数の解釈分解もopenvpnでやってるとかかな?であれば、
/bin/sh -c '/path/to/script.sh & true'
とかなんとか。書き方も違うかもしれない(' が必要なのか可能なのか、もしかしたらできないとか)
133デフォルトの名無しさん
2019/07/05(金) 06:22:27.69ID:CMdnJVDV POSIXユーティリティにネットワーク関連のコマンドが追加される予定ってあるの?
134デフォルトの名無しさん
2019/07/05(金) 10:21:41.11ID:CMdnJVDV >>128
perlはもともとどういう意味だったんだろうな。
perlはもともとどういう意味だったんだろうな。
135デフォルトの名無しさん
2019/07/05(金) 10:39:53.85ID:7D1ht1Ch teeの無理矢理感すき
136デフォルトの名無しさん
2019/07/05(金) 10:46:54.44ID:/9SntML6 >>134
確か pearl って言語が既にあったので perl にしたんだったと思った。
確か pearl って言語が既にあったので perl にしたんだったと思った。
137デフォルトの名無しさん
2019/07/06(土) 03:00:27.30ID:d8QKOOo3 >>135
そういういえばteeのパイプ版のpeeというのもあった。
そういういえばteeのパイプ版のpeeというのもあった。
138デフォルトの名無しさん
2019/07/06(土) 04:11:43.20ID:O76mcSig きたねぇな
139デフォルトの名無しさん
2019/07/06(土) 04:28:48.13ID:Db2rLmY3140デフォルトの名無しさん
2019/07/06(土) 05:18:54.35ID:d8QKOOo3141デフォルトの名無しさん
2019/07/06(土) 10:11:41.54ID:q0MZeBYW142デフォルトの名無しさん
2019/07/06(土) 10:27:36.00ID:Qorx3cLN comedyday
143デフォルトの名無しさん
2019/07/06(土) 14:22:39.80ID:B/itK7pP pingは潜水艦のソナー音
144デフォルトの名無しさん
2019/07/06(土) 16:53:09.35ID:p445ST1A sosコマンドとかないのかな。
145デフォルトの名無しさん
2019/07/08(月) 08:11:26.31ID:OnOhhClA tarが入ってない環境なんてあるのかな?
146デフォルトの名無しさん
2019/07/08(月) 08:54:13.07ID:ny4rr8vT paxコマンド使って、どうぞ
147デフォルトの名無しさん
2019/07/08(月) 08:56:35.94ID:uRBHZP6h ♪IN TERRA PAX〜
148デフォルトの名無しさん
2019/07/08(月) 16:03:08.50ID:u+KjwOdz >>144
sosreport ならある
sosreport ならある
149デフォルトの名無しさん
2019/07/09(火) 00:44:32.67ID:hKj+lpg6 sexという天文学用のコマンドがある事実
下ネタ満載のmanもあるらしいが
下ネタ満載のmanもあるらしいが
150デフォルトの名無しさん
2019/07/09(火) 08:05:36.87ID:DRnRn6EV151デフォルトの名無しさん
2019/07/09(火) 08:31:28.67ID:chrBBqpb s式の expression という意味で lisp では
sexp というワードが使われる時が sex ちらつく
シェルスクリプトじゃなくてごめん
sexp というワードが使われる時が sex ちらつく
シェルスクリプトじゃなくてごめん
152デフォルトの名無しさん
2019/07/09(火) 10:07:15.07ID:DRnRn6EV153デフォルトの名無しさん
2019/07/10(水) 13:17:47.35ID:AgLkizrd セマンティックバージョニングの並びで最新のタグを取得するにはどうすればいいの?
sort -Vはposixにはないようなんでなしで。
gitコマンドで(最後に付けたタグではなく)最新のタグが取得できればそれでも良いんだけど
sort -Vはposixにはないようなんでなしで。
gitコマンドで(最後に付けたタグではなく)最新のタグが取得できればそれでも良いんだけど
154デフォルトの名無しさん
2019/07/10(水) 13:29:47.61ID:eZpAq1ko155デフォルトの名無しさん
2019/07/10(水) 13:46:00.77ID:AgLkizrd 1桁目を並び替えて、それから2桁を並び替えて、それから3桁目を並び替えるってできるんかいな?
できたとしても、1.0.0 よりも 1.0.0-alpha は小さくなって、
1.0.0-alpha と 1.0.0-beta はASCII順で後者のほうが後で、
1.0.0-alpha と 1.0.0-alpha+20190710 は順番が同じなんていうルールが有るわけだけど
できたとしても、1.0.0 よりも 1.0.0-alpha は小さくなって、
1.0.0-alpha と 1.0.0-beta はASCII順で後者のほうが後で、
1.0.0-alpha と 1.0.0-alpha+20190710 は順番が同じなんていうルールが有るわけだけど
156デフォルトの名無しさん
2019/07/10(水) 15:06:48.80ID:StxWbt+s できたとしても以後がえぐい
157デフォルトの名無しさん
2019/07/10(水) 16:09:18.81ID:eZpAq1ko 素直にsort -V使うのが一番。
POSIXに準拠したければそれなりの実力がないとね。
少なくとも俺には無理w ていうかわざわざ既にある機能を苦労して再発明したくねーw
POSIXに準拠したければそれなりの実力がないとね。
少なくとも俺には無理w ていうかわざわざ既にある機能を苦労して再発明したくねーw
158デフォルトの名無しさん
2019/07/10(水) 16:15:38.61ID:6IY0QwqQ つまりどこでも動くシェルスクリプトなんて都市伝説だよね。
159デフォルトの名無しさん
2019/07/10(水) 17:49:00.07ID:lDiVjXP/ 世界征服して一つのシェルしか使わないように全世界の人間に強制すれば可能
160デフォルトの名無しさん
2019/07/10(水) 18:31:37.23ID:8OTK1K8V シェルだけ統一しても無理だな
161デフォルトの名無しさん
2019/07/10(水) 19:54:16.62ID:eZpAq1ko シェルスクリプトは「完全に」どこでも動くとは限らないけど
他の言語と比べて「ある程度」どこでも動く確率が高い。
他の言語と比べて「ある程度」どこでも動く確率が高い。
162デフォルトの名無しさん
2019/07/10(水) 20:10:25.56ID:8OTK1K8V 確率を言うならデータもってこいよ
どこにあるんだよその統計はw
どこにあるんだよその統計はw
163デフォルトの名無しさん
2019/07/10(水) 20:36:18.03ID:j+J/37U2 まだやってる。堂々巡りを。四国へ行け
164デフォルトの名無しさん
2019/07/10(水) 20:37:15.39ID:StxWbt+s それいわれたのC があって perl ができる前の常識でしょ
C よりは確かに移植性ある
C よりは確かに移植性ある
165デフォルトの名無しさん
2019/07/10(水) 20:59:14.35ID:lDiVjXP/ Windowsには最初からは入ってないよね?今のは入ってる?
まあ WSL 動かしちゃえば何でもありにはなるが。
まあ WSL 動かしちゃえば何でもありにはなるが。
166デフォルトの名無しさん
2019/07/10(水) 20:59:47.00ID:mGyL/3Gj そんなに難しい話じゃなくてshは多くの環境にインストールされてるってだけのことでしょ?
例えばPerlが初期インストールされてるような環境なら
必ずshもインストールされてる。
Perlが入って無くても、shはインストールされてる。
例えばPerlが初期インストールされてるような環境なら
必ずshもインストールされてる。
Perlが入って無くても、shはインストールされてる。
167デフォルトの名無しさん
2019/07/10(水) 21:01:25.84ID:mGyL/3Gj168デフォルトの名無しさん
2019/07/10(水) 21:13:36.75ID:mGyL/3Gj 結局の所Windowsとそれ以外のOSに分かれるわけで、
Windowsとそれ以外のOSの両方に入ってる言語はなくて、
Windows以外のOSに入ってる言語で一番多いのはshなんだよね。
Windowsとそれ以外のOSの両方に入ってる言語はなくて、
Windows以外のOSに入ってる言語で一番多いのはshなんだよね。
169デフォルトの名無しさん
2019/07/10(水) 21:16:39.60ID:mGyL/3Gj dockerとか使うとわかるけど、最小イメージのalpineには
perもrubyもpythonも入ってないからな
perもrubyもpythonも入ってないからな
170デフォルトの名無しさん
2019/07/10(水) 21:19:19.80ID:mGyL/3Gj そういやalpineにはbashですら入ってないのな
171デフォルトの名無しさん
2019/07/10(水) 21:23:57.90ID:6IdsJob5 /\___/\
/ / ヽ ::: \
| (●), 、(●)、 | / ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ,,ノ(、_, )ヽ、,, | < まーたはじまった
| ,;‐=‐ヽ .:::::| \_______
\ `ニニ´ .:::/
/`ー‐--‐‐―´´\
/ / ヽ ::: \
| (●), 、(●)、 | / ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ,,ノ(、_, )ヽ、,, | < まーたはじまった
| ,;‐=‐ヽ .:::::| \_______
\ `ニニ´ .:::/
/`ー‐--‐‐―´´\
172デフォルトの名無しさん
2019/07/10(水) 23:46:47.18ID:8OTK1K8V 要はPOSIXは必要最低限の機能しか規格化していないから出来ることには限界があるってことだ
173デフォルトの名無しさん
2019/07/11(木) 04:18:38.14ID:pY8YHtW/ >>168
そうそう。こういうことなんだよ。
そうそう。こういうことなんだよ。
174デフォルトの名無しさん
2019/07/11(木) 09:51:44.08ID:5BkhO8Tf 独自にcmdやpowershell持ってるしな
175デフォルトの名無しさん
2019/07/11(木) 10:49:49.47ID:7babKKNu Windowsにはshが入ってない!
→ かといってじゃあ他の言語が入っているかというと入ってない
Windowsは諦めた。それ以外で最初からOSに入っていてどこでも使える言語はなんだ?
→ sh
→ かといってじゃあ他の言語が入っているかというと入ってない
Windowsは諦めた。それ以外で最初からOSに入っていてどこでも使える言語はなんだ?
→ sh
176デフォルトの名無しさん
2019/07/11(木) 11:30:36.51ID:EFuj/0Xm どこでも動くシェルスクリプトって都市伝説だよねw
177デフォルトの名無しさん
2019/07/11(木) 11:35:07.95ID:nlZoRVuP /\___/\
/ / ヽ ::: \
| (●), 、(●)、 | / ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ,,ノ(、_, )ヽ、,, | < まーたはじまった
| ,;‐=‐ヽ .:::::| \_______
\ `ニニ´ .:::/
/`ー‐--‐‐―´´\
/ / ヽ ::: \
| (●), 、(●)、 | / ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ,,ノ(、_, )ヽ、,, | < まーたはじまった
| ,;‐=‐ヽ .:::::| \_______
\ `ニニ´ .:::/
/`ー‐--‐‐―´´\
178デフォルトの名無しさん
2019/07/11(木) 11:39:41.84ID:bvWe7WiP Javaなら一度書けばどこでも動くのに
179デフォルトの名無しさん
2019/07/11(木) 11:54:59.97ID:PMWvbDa1 まじで?
買ってきたばかりの ノートブック windows でも?
買ってきたばかりの ノートブック windows でも?
180デフォルトの名無しさん
2019/07/11(木) 12:03:46.60ID:oBmxbhd/ 買ってきたばかりの ノートブック windows でも
Perlなら動く!→動きません(笑)
Rubyなら? Pythonなら? C言語なら? NO!!!!
Perlなら動く!→動きません(笑)
Rubyなら? Pythonなら? C言語なら? NO!!!!
181デフォルトの名無しさん
2019/07/11(木) 12:05:03.00ID:PMWvbDa1 それでも Java なら動く?
182デフォルトの名無しさん
2019/07/11(木) 12:28:30.89ID:pY8YHtW/ PowerShellなら動きます(白目)
183デフォルトの名無しさん
2019/07/11(木) 12:29:45.46ID:W9yQmyPF Windowsに最初から入ってるのは vbs とか js とか、あとバッチファイルとかパワーシェルかな。よく知らんけど。
HTAってのもあったっけ。
HTAってのもあったっけ。
184デフォルトの名無しさん
2019/07/11(木) 12:34:10.09ID:CgGarxi7 powershell考えた奴は頭おかしいんじゃね
なんでいちいちコマンドとかあんな長いんだよ
無能にもほどがある
なんでいちいちコマンドとかあんな長いんだよ
無能にもほどがある
185デフォルトの名無しさん
2019/07/11(木) 12:50:53.46ID:At9Pc1xn adduserとuseraddどっちがどっちかたまに使うとき毎回調べるみたいなクソ下らないことしたくないからじゃない?
186デフォルトの名無しさん
2019/07/11(木) 12:57:39.35ID:oBmxbhd/ それをいうなら、Windows、Macで、どの言語でも構わないが
ユーザーを追加する方法を調べないでわかるっていうの?
ユーザーを追加する方法を調べないでわかるっていうの?
187デフォルトの名無しさん
2019/07/11(木) 12:58:48.61ID:l57S3jiM POSIXってUNIX系OSの規格なのに
なんでWindowsの話になってんだよw
なんでWindowsの話になってんだよw
188デフォルトの名無しさん
2019/07/11(木) 13:00:17.64ID:A1tpN7ls >>181
インストールしないで動くのか?
インストールしないで動くのか?
189デフォルトの名無しさん
2019/07/11(木) 13:01:52.25ID:PMWvbDa1190デフォルトの名無しさん
2019/07/11(木) 13:23:31.79ID:W9yQmyPF >>189
入れたかったんだけどね・・・
入れたかったんだけどね・・・
191デフォルトの名無しさん
2019/07/11(木) 14:01:00.83ID:l57S3jiM Javaはオワコン
192デフォルトの名無しさん
2019/07/11(木) 14:06:11.17ID:oQkLsXMb javaのコンセプト
write ones, test everywhere
write ones, test everywhere
193デフォルトの名無しさん
2019/07/11(木) 14:16:47.27ID:5J3UX5Vb debug anywhereやろ
194デフォルトの名無しさん
2019/07/11(木) 14:20:46.71ID:xCkJ5LaR Windows, WSL, Ubuntu16.04 では、Python, Perl は最初から入っている。
Ruby は、apt でインストールした
ls −l /usr/bin/python
/usr/bin/python −> python2.7
ls −l /usr/bin/python3
/usr/bin/python3 −> python3.5
ls −l /usr/bin/perl
/usr/bin/perl
ls −l /usr/bin/ruby
/usr/bin/ruby −> ruby2.3
注意。サーバーエラーになるので、全角に変換した
Ruby は、apt でインストールした
ls −l /usr/bin/python
/usr/bin/python −> python2.7
ls −l /usr/bin/python3
/usr/bin/python3 −> python3.5
ls −l /usr/bin/perl
/usr/bin/perl
ls −l /usr/bin/ruby
/usr/bin/ruby −> ruby2.3
注意。サーバーエラーになるので、全角に変換した
195デフォルトの名無しさん
2019/07/11(木) 14:59:54.89ID:3GvBtncU そういえば IBM の z/OS ではどうなっているんだろうと
思ったら z/OS シェルってのがデフォルトでインストール
されてて、こいつは POSIX compliant らしい
思ったら z/OS シェルってのがデフォルトでインストール
されてて、こいつは POSIX compliant らしい
196デフォルトの名無しさん
2019/07/11(木) 15:48:04.71ID:PMWvbDa1 それだ WSL が標準で最初から入っているようになると
昔のニュースで見たが、どうなっているの?
標準は取りやめ? Windows の最新情報追ってないからわからない
昔のニュースで見たが、どうなっているの?
標準は取りやめ? Windows の最新情報追ってないからわからない
197194
2019/07/11(木) 16:19:18.53ID:xCkJ5LaR Windows10 を普通にアップデートしていれば、WSL は、最初から入っている。
ストアから、Ubuntu18.04 (長期サポート版)などをインストールして、日本語化すればよい
漏れはまだ、古いUbuntu16.04 の方を使っているけど
ストアから、Ubuntu18.04 (長期サポート版)などをインストールして、日本語化すればよい
漏れはまだ、古いUbuntu16.04 の方を使っているけど
198デフォルトの名無しさん
2019/07/11(木) 18:15:20.64ID:8iBC56G3199デフォルトの名無しさん
2019/07/11(木) 18:16:22.72ID:8iBC56G3 >>189
XPは標準で入ってて問題になった
XPは標準で入ってて問題になった
200デフォルトの名無しさん
2019/07/11(木) 18:29:01.43ID:8iBC56G3 個人的には、*nixとWindowsの違いは、
シェルと馴染んだコマンド群の有無、シェルスクリプトの実行可否だけなので、
それさえできれば、どちらでもいいや。
Cygwinはややストレス溜まったけど、WSLはだいぶ快適になった。
シェルと馴染んだコマンド群の有無、シェルスクリプトの実行可否だけなので、
それさえできれば、どちらでもいいや。
Cygwinはややストレス溜まったけど、WSLはだいぶ快適になった。
201デフォルトの名無しさん
2019/07/12(金) 00:13:06.93ID:Iwx9PgjW cmdのオプションが/なのは当て付けなんだろうか
XENIXを売ってた頃のMS知らんけど
XENIXを売ってた頃のMS知らんけど
202デフォルトの名無しさん
2019/07/12(金) 00:38:52.25ID:hw+u6C0G 階層がないファイルシステムだと - でも / でもどっちでも違和感が無いのだろう
単に好みでそれにしたってだけじゃないかな
階層があるようになって / を好みで選んで失敗したと思ったけどどうにもならななかったよう
手立ては用意したがサードパーティがそれを使わないとか
単に好みでそれにしたってだけじゃないかな
階層があるようになって / を好みで選んで失敗したと思ったけどどうにもならななかったよう
手立ては用意したがサードパーティがそれを使わないとか
203デフォルトの名無しさん
2019/07/12(金) 00:54:25.43ID:hw+u6C0G ああ、どうにもならなかったのは、
オプションを/にしてしまったからとりあえずパス区切りはバックスラッシュにしたよ、でも、/ にもできるよ
だった。オプションを - に変えるのは今でも前のいつでもできるだろうな
コマンドによっては別の意味を持たせてとかありそうだが、なんの拘りなんだかよくわからんな
オプションを/にしてしまったからとりあえずパス区切りはバックスラッシュにしたよ、でも、/ にもできるよ
だった。オプションを - に変えるのは今でも前のいつでもできるだろうな
コマンドによっては別の意味を持たせてとかありそうだが、なんの拘りなんだかよくわからんな
204デフォルトの名無しさん
2019/07/12(金) 08:37:34.85ID:paORMduQ https://packages.debian.org/ja/experimental/ksh
kshはずっと93uだったはずだが、2020なんてのがでるのか?
kshはずっと93uだったはずだが、2020なんてのがでるのか?
205デフォルトの名無しさん
2019/07/12(金) 10:59:03.44ID:paORMduQ 同じPCで一つがWSL1上のUbuntu、もう一つがDocker上のUbuntuで
lsb_release -aしてどちらも同じUbuntu 18.04.2 LTSなのに
kshのシェルに入ってから以下のコマンドを実行すると違いがある
echo $((99999999999999999))
=> 100000000000000000 # WSL
=> 99999999999999999 # Docker
KSV_VERSIONは両方とも同じ Version AJM 93u+ 2012-08-01
カーネル関係なさそうなのに、なんでだろう?
lsb_release -aしてどちらも同じUbuntu 18.04.2 LTSなのに
kshのシェルに入ってから以下のコマンドを実行すると違いがある
echo $((99999999999999999))
=> 100000000000000000 # WSL
=> 99999999999999999 # Docker
KSV_VERSIONは両方とも同じ Version AJM 93u+ 2012-08-01
カーネル関係なさそうなのに、なんでだろう?
206デフォルトの名無しさん
2019/07/12(金) 11:04:55.32ID:OtxPhCkg 大きな数の取り扱いの限界が違うのかも
207デフォルトの名無しさん
2019/07/12(金) 12:04:33.46ID:uJ9G3Ton ディレクトリごとの正確なファイル数が高速に知りたいです。
208デフォルトの名無しさん
2019/07/12(金) 12:15:53.93ID:OtxPhCkg ls より find が早い
再帰ディレクトリ探索とファイル名出力はそれに任せて
その出力をパイプで変換していったらいいんじゃないか?
再帰ディレクトリ探索とファイル名出力はそれに任せて
その出力をパイプで変換していったらいいんじゃないか?
209デフォルトの名無しさん
2019/07/12(金) 12:22:05.68ID:gCudY7G9 なぜduでファイル数も調べられるようにしなかったのか?
210デフォルトの名無しさん
2019/07/12(金) 12:22:27.56ID:gCudY7G9 duの作者に問い詰めたい
211デフォルトの名無しさん
2019/07/12(金) 12:24:06.88ID:OtxPhCkg やるべきことは最小限の1つ
UNIXの哲学でしょ
小さいから早い
小さいからパイプでつなげていろいろ実現できる
小さいから保守できる
UNIXの哲学でしょ
小さいから早い
小さいからパイプでつなげていろいろ実現できる
小さいから保守できる
212デフォルトの名無しさん
2019/07/12(金) 12:27:18.37ID:gCudY7G9 その理屈だと、lsコマンドはファイルの名前だけじゃなくて
ファイルサイズまで表示している。
最小限になってない。findコマンドを見習え
って話になるんだがw
ファイルサイズまで表示している。
最小限になってない。findコマンドを見習え
って話になるんだがw
213デフォルトの名無しさん
2019/07/12(金) 12:28:12.53ID:gpn1wbN7 >>209
ファイルを数えるのはduの仕事じゃないから
ファイルを数えるのはduの仕事じゃないから
214デフォルトの名無しさん
2019/07/12(金) 12:30:19.18ID:gCudY7G9 ファイルを数えるのは誰の仕事?
仕事は一番うまくできる人がするべきですよ
仕事は一番うまくできる人がするべきですよ
215デフォルトの名無しさん
2019/07/12(金) 12:32:27.12ID:gCudY7G9 そういやファイル名に改行が含まれる場合、
POSIX準拠コマンド&オプションだけで数えられるの?
POSIX準拠コマンド&オプションだけで数えられるの?
216デフォルトの名無しさん
2019/07/12(金) 12:35:41.89ID:gCudY7G9 やるべきことは最小限っていったら
duコマンドなんていらんよな
findでファイル検索して、lsでファイルの情報出して
awkで加算すれば良い
パイプでつなげていろいろ実現できる
duコマンドなんていらんよな
findでファイル検索して、lsでファイルの情報出して
awkで加算すれば良い
パイプでつなげていろいろ実現できる
217デフォルトの名無しさん
2019/07/12(金) 12:53:26.46ID:433S/V3Z218デフォルトの名無しさん
2019/07/12(金) 13:00:19.57ID:WQ2UtQMj219デフォルトの名無しさん
2019/07/12(金) 13:39:06.41ID:uwyqXnfJ 元々、浮動小数点は誤差があるから、どっちでも良い
誤差無しなら、プログラミング言語で、Decimal などのライブラリを使わないといけない
誤差無しなら、プログラミング言語で、Decimal などのライブラリを使わないといけない
220デフォルトの名無しさん
2019/07/12(金) 13:49:24.26ID:OtxPhCkg221デフォルトの名無しさん
2019/07/12(金) 13:57:13.80ID:q8HbeEfz >>207
$ find 〈対象ディレクトリ〉 -type f | wc -l
$ find 〈対象ディレクトリ〉 -type f | wc -l
222デフォルトの名無しさん
2019/07/12(金) 13:59:45.00ID:q8HbeEfz bcコマンド使いなよ。POSIXで定められたほとんど唯一といっていい任意精度演算ができるコマンドだぜ。
残念ながらなぜかUbuntuには初期状態で入っていない……。
残念ながらなぜかUbuntuには初期状態で入っていない……。
223デフォルトの名無しさん
2019/07/12(金) 14:11:11.28ID:OtxPhCkg >>207
find ~/web -type f | perl -pe 's{[^/]+$}{\n}m'|uniq -c
27 /home/web/
11 /home/web/elona/
5 /home/web/elona/.git/
9 /home/web/elona/.git/hooks/
1 /home/web/elona/.git/info/
...
find ~/web -type f | perl -pe 's{[^/]+$}{\n}m'|uniq -c
27 /home/web/
11 /home/web/elona/
5 /home/web/elona/.git/
9 /home/web/elona/.git/hooks/
1 /home/web/elona/.git/info/
...
224デフォルトの名無しさん
2019/07/12(金) 14:17:11.58ID:OtxPhCkg やっぱりシェルスクリプトのパイプやばい
たった1行の短いのでそこそこ早いのが書きあがっちゃう
たった1行の短いのでそこそこ早いのが書きあがっちゃう
225デフォルトの名無しさん
2019/07/12(金) 17:35:59.38ID:greuAEFm >>220
emacsは出自がUnixじゃないから
emacsは出自がUnixじゃないから
226デフォルトの名無しさん
2019/07/12(金) 18:42:09.14ID:q8HbeEfz ちなみにPlan 9(Unixの後釜)のlsはもっと洗練された体系になってる。
あとPlan 9のEmacsの手引書がおもしろい
あとPlan 9のEmacsの手引書がおもしろい
227デフォルトの名無しさん
2019/07/12(金) 19:16:50.62ID:13weq3zY Plan 9の今後のプランは!?
228デフォルトの名無しさん
2019/07/12(金) 19:39:49.25ID:gpn1wbN7 Plan 9も最初からGPLで公開していればLinuxと肩を並べてたかもね
229デフォルトの名無しさん
2019/07/12(金) 20:39:39.59ID:fylm51D9230デフォルトの名無しさん
2019/07/13(土) 10:28:41.44ID:H4ToI7wx231デフォルトの名無しさん
2019/07/13(土) 10:36:29.63ID:006l8Xk5232デフォルトの名無しさん
2019/07/13(土) 10:51:01.49ID:Q8eoyE6C 並列「プログラミング」ではないな
単に仕組みとしてプロセスが同時並行しているだけで
単に仕組みとしてプロセスが同時並行しているだけで
233デフォルトの名無しさん
2019/07/13(土) 13:12:58.10ID:PcwCdG6p234デフォルトの名無しさん
2019/07/13(土) 14:39:07.51ID:4CNtNVmB 単機能のコマンドを組み合わせて処理するのがシェルスクリプトだからな
それで速度が遅いだの言うならシェルスクリプトなんか使わなければいい
それで速度が遅いだの言うならシェルスクリプトなんか使わなければいい
235デフォルトの名無しさん
2019/07/13(土) 16:01:43.14ID:Lat3oh38 >>223
uniq -cの前にsortしなくていいの?
uniq -cの前にsortしなくていいの?
236デフォルトの名無しさん
2019/07/13(土) 16:32:06.44ID:006l8Xk5237デフォルトの名無しさん
2019/07/13(土) 16:34:17.14ID:006l8Xk5 ソートはたぶん早くないから
つまりコストが高いから
たぶん定番のあれやったほうがいい
1行ずつ読みこんだそれでハッシュ作って インクリメントしてくあれ
つまりコストが高いから
たぶん定番のあれやったほうがいい
1行ずつ読みこんだそれでハッシュ作って インクリメントしてくあれ
238デフォルトの名無しさん
2019/07/13(土) 18:44:37.37ID:Wy302ne8 実はPOSIX sortならsort -uでuniq | sortと同等ことができるのでuniqは実質要らない子
239デフォルトの名無しさん
2019/07/13(土) 19:00:08.87ID:Q8eoyE6C uniqは重複したのを抽出する目的での利用が多いな
純粋にuniqで使う機会の方が極端に少ない
純粋にuniqで使う機会の方が極端に少ない
240デフォルトの名無しさん
2019/07/13(土) 19:23:10.38ID:56OavmE8 uniq | sortって使い方分かってない奴かよw
uniqくらいソース読んでみなよ
uniqくらいソース読んでみなよ
241デフォルトの名無しさん
2019/07/13(土) 19:38:16.75ID:Wy302ne8242デフォルトの名無しさん
2019/07/13(土) 20:35:19.67ID:yaak8A3v ls .-lのrwxに8進数表記も追加できないかな
243デフォルトの名無しさん
2019/07/13(土) 22:25:11.39ID:h6vp2MpA244デフォルトの名無しさん
2019/07/13(土) 22:28:56.59ID:h6vp2MpA あ、setuid/setgid/sticky bit のこと忘れてたわ
245デフォルトの名無しさん
2019/07/13(土) 22:47:31.71ID:YCgasS9+ find ~TEST -type f -printf "%h\n" |sort |uniq -c
これは早いわ
これは早いわ
246デフォルトの名無しさん
2019/07/13(土) 23:30:54.16ID:yaak8A3v duのファイル版は俺も作ったけど未熟なんでこんな出来に
find ./ -type d -printf "%p " -exec bash -c 'ls -b "{}" | wc -l' \; | sed -r 's/(.* )(\w+)/\2\t\1/g'
find ./ -type d -printf "%p " -exec bash -c 'ls -b "{}" | wc -l' \; | sed -r 's/(.* )(\w+)/\2\t\1/g'
247デフォルトの名無しさん
2019/07/13(土) 23:43:20.86ID:PcwCdG6p >>246
見易くていいね!
見易くていいね!
248デフォルトの名無しさん
2019/07/14(日) 00:22:33.01ID:KitiOp9Q249デフォルトの名無しさん
2019/07/14(日) 02:01:57.73ID:ygf6VvPi >>207
Ruby の、1-liner で、特定のディレクトリ以下を再帰的にたどりながら(find)、
ディレクトリ以外(reject)を表示する。
%Q("〜") は、" を、Windows のPowerShell に解釈させないために、クォートする
-r で、pathname モジュールを読み込む
ただし、途中で改行しているけど、実際には改行しないで下さい!
ruby -rpathname -e 'Pathname( %Q("C:/Users/Owner/Documents/Ruby/test") ).find
{ |path| if File.directory?( path ) then; puts path, path.children.reject( &:directory? ).length end; }'
出力
C:/Users/Owner/Documents/Ruby/test
11
C:/Users/Owner/Documents/Ruby/test/a
4
C:/Users/Owner/Documents/Ruby/test/a/b
0
Ruby の、1-liner で、特定のディレクトリ以下を再帰的にたどりながら(find)、
ディレクトリ以外(reject)を表示する。
%Q("〜") は、" を、Windows のPowerShell に解釈させないために、クォートする
-r で、pathname モジュールを読み込む
ただし、途中で改行しているけど、実際には改行しないで下さい!
ruby -rpathname -e 'Pathname( %Q("C:/Users/Owner/Documents/Ruby/test") ).find
{ |path| if File.directory?( path ) then; puts path, path.children.reject( &:directory? ).length end; }'
出力
C:/Users/Owner/Documents/Ruby/test
11
C:/Users/Owner/Documents/Ruby/test/a
4
C:/Users/Owner/Documents/Ruby/test/a/b
0
250デフォルトの名無しさん
2019/07/14(日) 06:45:35.11ID:GSQZGuhE stat -c '%A %U %G %z %n' .*
↑こういうのどう? lsのパーミッション表示を8進数に
まあPOSIXに規定されてないけど
↑こういうのどう? lsのパーミッション表示を8進数に
まあPOSIXに規定されてないけど
251デフォルトの名無しさん
2019/07/14(日) 10:08:35.55ID:niuQOGKU >>245
sort を差し替えた
~/ 対象にしたら倍速
find ~/ -type f -printf "%h\n" | perl -ne '$dirs{$_} += 1; END{for $key (keys %dirs) {printf "%5s %s", $dirs{$key}, $key } }'
sort を差し替えた
~/ 対象にしたら倍速
find ~/ -type f -printf "%h\n" | perl -ne '$dirs{$_} += 1; END{for $key (keys %dirs) {printf "%5s %s", $dirs{$key}, $key } }'
252デフォルトの名無しさん
2019/07/14(日) 10:11:35.12ID:niuQOGKU 途中だった
最後に | sort -k 2,2 入れても入れなくてもあまり変わらない
やはり指数関数的にsort に大量渡すと遅くなる
最後に | sort -k 2,2 入れても入れなくてもあまり変わらない
やはり指数関数的にsort に大量渡すと遅くなる
253デフォルトの名無しさん
2019/07/14(日) 12:30:16.97ID:GSQZGuhE LANG=Cでやってみ。
254デフォルトの名無しさん
2019/07/14(日) 13:29:14.61ID:VYOKuUQn POSIX の find って -printf がないのな。
難しいことは -exec でなんとかしろということか。
難しいことは -exec でなんとかしろということか。
255デフォルトの名無しさん
2019/07/14(日) 13:32:10.29ID:VYOKuUQn256デフォルトの名無しさん
2019/07/14(日) 14:08:00.15ID:Vo3Tn1vW Perlようわからんけど、findのところもまとめていわゆるVisitorパターンでやると?
シェルだと時間掛かる。
#!/bin/bash
shopt -s dotglob
walk() {
local c=0
for p in "$1"/*; do
if [ -d "$p" ]; then
walk "$p" # recursive call
elif [ -f "$p" ]; then
((c++))
fi
done
echo "$1: $c"
}
start_dir=$(basename "$1")
walk "$start_dir"
シェルだと時間掛かる。
#!/bin/bash
shopt -s dotglob
walk() {
local c=0
for p in "$1"/*; do
if [ -d "$p" ]; then
walk "$p" # recursive call
elif [ -f "$p" ]; then
((c++))
fi
done
echo "$1: $c"
}
start_dir=$(basename "$1")
walk "$start_dir"
257デフォルトの名無しさん
2019/07/14(日) 14:15:10.09ID:niuQOGKU258デフォルトの名無しさん
2019/07/14(日) 15:14:56.46ID:GSQZGuhE どうせPerl使うんならPerlに用意されているfindコマンド的な関数使えばいいのに。
いや正直Perl書けないので外部コマンドのほうが効率いいのかも知れんけど
いや正直Perl書けないので外部コマンドのほうが効率いいのかも知れんけど
259デフォルトの名無しさん
2019/07/14(日) 15:43:17.08ID:niuQOGKU 今回たまたま perl が早かったのは
>237
ということ
つまり C は10倍ぐらい早いけど
何十倍も無駄なことやってたら遅くなってしまう
高速な find の出力を |sort |uniq -c したら一応答えでるけど
そのsort がウルトラ処理多い
だったらperl で1行ずつ読んで正しいアルゴリズムで処理したほうが早いだけ
>237
ということ
つまり C は10倍ぐらい早いけど
何十倍も無駄なことやってたら遅くなってしまう
高速な find の出力を |sort |uniq -c したら一応答えでるけど
そのsort がウルトラ処理多い
だったらperl で1行ずつ読んで正しいアルゴリズムで処理したほうが早いだけ
260デフォルトの名無しさん
2019/07/14(日) 16:48:51.97ID:XOVWGW1L perlでソートしてないから
261デフォルトの名無しさん
2019/07/14(日) 19:10:07.29ID:BEvjoRaR なんだperlでソートしたら遅いのか
262デフォルトの名無しさん
2019/07/14(日) 19:11:22.06ID:AAGaqnKC >>227
Plan無いん
Plan無いん
264デフォルトの名無しさん
2019/07/14(日) 20:02:48.24ID:XOVWGW1L awk版。ディレクトリ名でソートするなら sort -k2
find . -type f -exec dirname {} + | awk '{c[$0]++}END{for(i in c){printf"%4d %s\n",c[i],i}}' | sort
find . -type f -exec dirname {} + | awk '{c[$0]++}END{for(i in c){printf"%4d %s\n",c[i],i}}' | sort
265デフォルトの名無しさん
2019/07/14(日) 20:08:54.86ID:XOVWGW1L xargs使ったほうが良いかな
find . -type f | xargs dirname | awk '{c[$0]++}END{for(i in c){printf"%4d %s\n",c[i],i}}' | sort
find . -type f | xargs dirname | awk '{c[$0]++}END{for(i in c){printf"%4d %s\n",c[i],i}}' | sort
266デフォルトの名無しさん
2019/07/15(月) 08:12:50.57ID:jP+0UVPX どうせなら計測結果も付記してくれよ
267デフォルトの名無しさん
2019/07/15(月) 10:56:15.79ID:Ww8nr7y5 やってることが同じなら、Perlとawkは比較するまでもないのでは?
268デフォルトの名無しさん
2019/07/15(月) 12:22:56.47ID:E9YINa1F 数分で書けるのがシェルスクリプトの良いところなんだし
数百万のファイルを何分以内で処理せよとか性能要件があるなら
そもそもシェルスクリプトなんかで書かないわ
数百万のファイルを何分以内で処理せよとか性能要件があるなら
そもそもシェルスクリプトなんかで書かないわ
269デフォルトの名無しさん
2019/07/15(月) 15:08:49.68ID:3UWFYY1V 高速化するならC言語使うな。
270デフォルトの名無しさん
2019/07/15(月) 16:42:34.21ID:jP+0UVPX なんかシェルスクリプトを貶す人間ってシェルスクリプトを本来の目的とは違う方法で使った結果失敗して
その恨みを自分の無能さではなくシェルスクリプトにぶつけてる印象。
その恨みを自分の無能さではなくシェルスクリプトにぶつけてる印象。
271デフォルトの名無しさん
2019/07/15(月) 16:46:57.72ID:tvlJQJn9 このパーツは意外と頻度多いからCで書いておいてもいいかもね
| perl -ne '$dirs{$_} += 1; END{for $key (sort keys %dirs) {printf "%5s %s", $dirs{$key}, $key } }'
| perl -ne '$dirs{$_} += 1; END{for $key (sort keys %dirs) {printf "%5s %s", $dirs{$key}, $key } }'
272デフォルトの名無しさん
2019/07/15(月) 19:25:46.44ID:jP+0UVPX 端末の応答(例えば$ printf '\e]11;?\e\\'で返ってくる\e]11;rgb:〈赤〉/〈緑〉/〈青〉\e\\っていう文字列)を
sedやらなにやらで加工できるように標準出力に流したいんだど
そのままの状態だと端末そのものに文字列が渡ってしまって加工できない。
$ printf '\e]11;?\e\\' | od
みたいにすると(当然だけど)\e]11;?\e\\という文字列がパイプを通ってしまう。
個人的にはsttyとかをうまくやりくりしたらいけそうな気もするのだけど
そういう文書や記事がないのと俺があまり端末の処理に詳しくないのとで今のところ成功していない。
端末応答を標準出力として処理できる方法知らないですかね。
sedやらなにやらで加工できるように標準出力に流したいんだど
そのままの状態だと端末そのものに文字列が渡ってしまって加工できない。
$ printf '\e]11;?\e\\' | od
みたいにすると(当然だけど)\e]11;?\e\\という文字列がパイプを通ってしまう。
個人的にはsttyとかをうまくやりくりしたらいけそうな気もするのだけど
そういう文書や記事がないのと俺があまり端末の処理に詳しくないのとで今のところ成功していない。
端末応答を標準出力として処理できる方法知らないですかね。
273デフォルトの名無しさん
2019/07/15(月) 19:47:51.35ID:iDG/5azN >>272
色というものが何者かわかってないんじゃね?
色を付けるためのエスケープシーケンスっていうのは、
エスケープ文字、ASCIIコード表でESC(0x1B)の文字8進数だと033
ESC文字から始まる一連の文字列の流れ(シーケンス)ってだけだよ
だから0x1Bで始まるその文字列を加工すりゃ良い。
\e]11;の ]11;は単なる文字だけど、\eは(シェルによりけりだが)
0x1Bの文字に置き換わる。だからsedなんかで\eを見つけようとしてもだめ
そんな文字列は流れてこないんだから
色というものが何者かわかってないんじゃね?
色を付けるためのエスケープシーケンスっていうのは、
エスケープ文字、ASCIIコード表でESC(0x1B)の文字8進数だと033
ESC文字から始まる一連の文字列の流れ(シーケンス)ってだけだよ
だから0x1Bで始まるその文字列を加工すりゃ良い。
\e]11;の ]11;は単なる文字だけど、\eは(シェルによりけりだが)
0x1Bの文字に置き換わる。だからsedなんかで\eを見つけようとしてもだめ
そんな文字列は流れてこないんだから
274デフォルトの名無しさん
2019/07/15(月) 19:59:18.87ID:jP+0UVPX >>273
あー。いやそうじゃなくて 端末の応答を取得したいんよ。
試しに
$ printf '\e]11;?\e\\'
ってやってみて。多分端末の上に
^[]11;rgb:0c0c/0c0c/0c0c^[\
みたいな文字列が表われる。
この文字列をtestコマンドの対象にしたりしたい。
でも普通の方法ではこの文字列は標準出力ではなく端末の上に直接出力されてるから
そういう加工ができない。
あー。いやそうじゃなくて 端末の応答を取得したいんよ。
試しに
$ printf '\e]11;?\e\\'
ってやってみて。多分端末の上に
^[]11;rgb:0c0c/0c0c/0c0c^[\
みたいな文字列が表われる。
この文字列をtestコマンドの対象にしたりしたい。
でも普通の方法ではこの文字列は標準出力ではなく端末の上に直接出力されてるから
そういう加工ができない。
275デフォルトの名無しさん
2019/07/15(月) 20:00:57.13ID:iDG/5azN >>274
話の内容を単純化しよう。
文字の内容は今どうでもいい話だろ?
printf 'hogehoge' ってやってみたら
端末の上に、hogehoge って表示されるな?
それでこの文字列をどうしたいって?
話の内容を単純化しよう。
文字の内容は今どうでもいい話だろ?
printf 'hogehoge' ってやってみたら
端末の上に、hogehoge って表示されるな?
それでこの文字列をどうしたいって?
276デフォルトの名無しさん
2019/07/15(月) 20:20:16.67ID:f1G4msuO わかってない奴が話に絡んでいくなよ
文字列なんか関係ない
奴はttyの出力(もしくは入力)を横取りしてパスワードを盗みたいという話をしてる
文字列なんか関係ない
奴はttyの出力(もしくは入力)を横取りしてパスワードを盗みたいという話をしてる
277デフォルトの名無しさん
2019/07/15(月) 20:21:36.85ID:iDG/5azN $ printf '\e]11;?\e\\' の話だろ?
278デフォルトの名無しさん
2019/07/15(月) 21:13:36.27ID:f1G4msuO ぜんぜん違う
279デフォルトの名無しさん
2019/07/15(月) 21:15:41.25ID:iDG/5azN280デフォルトの名無しさん
2019/07/15(月) 21:21:51.85ID:qldwvqW5281デフォルトの名無しさん
2019/07/15(月) 21:35:01.81ID:f1G4msuO282デフォルトの名無しさん
2019/07/15(月) 21:42:13.41ID:qldwvqW5 >>274
そういうのが出る Terminalアプリ もあるし出ないのもある
Terminalアプリが出しているんでしょ、その エスケープシーケンスを Terminalの画面制御 のために
Terminalアプリの作りによるんじゃないかなあ、また、Terminalアプリで何か提供してなきゃダメなんじゃないかなあ
>281
そもそもは出力をだから出力で入力をは無理だな。エコーバックは今時はローカルではしてないんじゃね、パスワードを生で表示だろしw
そういうのが出る Terminalアプリ もあるし出ないのもある
Terminalアプリが出しているんでしょ、その エスケープシーケンスを Terminalの画面制御 のために
Terminalアプリの作りによるんじゃないかなあ、また、Terminalアプリで何か提供してなきゃダメなんじゃないかなあ
>281
そもそもは出力をだから出力で入力をは無理だな。エコーバックは今時はローカルではしてないんじゃね、パスワードを生で表示だろしw
283デフォルトの名無しさん
2019/07/15(月) 22:20:41.82ID:qldwvqW5 なんのエスケープシーケンスなのか知らずにだったが、OSC Operating System Commandつうのね。で、制御ではなくてリポート(情報)なのね
Teminalアプリは、それを相手(シェルプログラム)への入力として出力しているのでできそうか
Teminalアプリは、それを相手(シェルプログラム)への入力として出力しているのでできそうか
284デフォルトの名無しさん
2019/07/15(月) 22:24:08.87ID:EBIcrGzb ls結果をテキストエディタで開いた時[0mだらけで焦った思い出
ANSIカラーコードって正規表現で消せるのかしら
ANSIカラーコードって正規表現で消せるのかしら
285デフォルトの名無しさん
2019/07/15(月) 22:38:58.41ID:tvlJQJn9286デフォルトの名無しさん
2019/07/15(月) 22:54:17.82ID:qldwvqW5 >>274
#!/bin/bash
result=''
printf '\e]11;?\e\\'
while read -s -N 1 -t 0.2 char
do
result="$result$char"
done
printf "%s" "$result" > hoge
試行錯誤中だけど、こんなんで取れてる
#!/bin/bash
result=''
printf '\e]11;?\e\\'
while read -s -N 1 -t 0.2 char
do
result="$result$char"
done
printf "%s" "$result" > hoge
試行錯誤中だけど、こんなんで取れてる
287デフォルトの名無しさん
2019/07/15(月) 22:55:24.82ID:jP+0UVPX >>275
その文字列はパイプで処理できるじゃん。
例えば
$ printf 'hogehoge' | sed -e 's/hoge/fuga/'
でも端末応答の文字列はそういう処理ができないのよ。
試してみると分かる。
その文字列はパイプで処理できるじゃん。
例えば
$ printf 'hogehoge' | sed -e 's/hoge/fuga/'
でも端末応答の文字列はそういう処理ができないのよ。
試してみると分かる。
288デフォルトの名無しさん
2019/07/15(月) 22:59:10.56ID:jP+0UVPX289デフォルトの名無しさん
2019/07/16(火) 01:24:24.20ID:b8YViJ87 こんな感じかなぁ
$ stty -echo;printf '\e]11;?\e\\'; IFS=';' read -r -d '\' _ bgcolor;stty echo
$ echo $bgcolor
rgb:3232/3232/3232
$ stty -echo;printf '\e]11;?\e\\'; IFS=';' read -r -d '\' _ bgcolor;stty echo
$ echo $bgcolor
rgb:3232/3232/3232
290デフォルトの名無しさん
2019/07/16(火) 01:27:52.36ID:b8YViJ87 あ、尻尾に ESC(0x1b) が付いてるから適当に削ってちょ
291デフォルトの名無しさん
2019/07/16(火) 02:07:13.54ID:6ZdisLnD292デフォルトの名無しさん
2019/07/16(火) 16:37:09.91ID:6ZdisLnD シェルスクリプトでラムダ計算を実装するとしたらどんなインターフェースがいいんだろう。
lambda -x @ 'echo @ | tr "[A-Z]" "[a-z]"'
でもこれだとこの後に適用したい変数を持って来たときにlambdaコマンドの引数と見分けがつかなくなる…。
lambda -x @ 'echo @ | tr "[A-Z]" "[a-z]"'
でもこれだとこの後に適用したい変数を持って来たときにlambdaコマンドの引数と見分けがつかなくなる…。
293デフォルトの名無しさん
2019/07/16(火) 16:40:13.19ID:cpfSTA9t パイプつなげるのが普通だから
xargs とか
なんか {} みたいなのでこれまでのパイプの流れてきたのを表現する
コマンドがあったからそれでいいんじゃないか?
xargs とか
なんか {} みたいなのでこれまでのパイプの流れてきたのを表現する
コマンドがあったからそれでいいんじゃないか?
294デフォルトの名無しさん
2019/07/16(火) 16:55:42.40ID:zaQ9s3Gk >>292
何が問題なのかわからんけど、
1. ラムダ計算だとしてlambdaコマンドに引数なんているの?
2. 'echo なんたら' の前がlambdaコマンド引数、後ろがechoの引数でいいだろ?
3. 'echo なんたら' で区切れない場合、-- で区切るのがよくある実装方法
って言っておくよ
何が問題なのかわからんけど、
1. ラムダ計算だとしてlambdaコマンドに引数なんているの?
2. 'echo なんたら' の前がlambdaコマンド引数、後ろがechoの引数でいいだろ?
3. 'echo なんたら' で区切れない場合、-- で区切るのがよくある実装方法
って言っておくよ
295デフォルトの名無しさん
2019/07/16(火) 17:34:51.11ID:6ZdisLnD >>293
そうそう。xargsみたいなのを妄想してるw
そうそう。xargsみたいなのを妄想してるw
296デフォルトの名無しさん
2019/07/16(火) 19:39:35.56ID:6ZdisLnD >>294
例えばPython3のラムダ計算だと
(lambda x: x * x)(3)
みたいな形式じゃん。
キーワードlambdaをコマンド
変数宣言x:を、どんな変数を扱うかというオプション
(xargsで言う-I)
演算本体のx * xは被演算子
としてみた。
例えばPython3のラムダ計算だと
(lambda x: x * x)(3)
みたいな形式じゃん。
キーワードlambdaをコマンド
変数宣言x:を、どんな変数を扱うかというオプション
(xargsで言う-I)
演算本体のx * xは被演算子
としてみた。
297デフォルトの名無しさん
2019/07/17(水) 23:26:41.26ID:ySrAQEz0 このラムダ計算は偽物だ。食べられないよ。
また明日来てください。僕が本当のラムダ計算をお見せしますよ。
また明日来てください。僕が本当のラムダ計算をお見せしますよ。
298デフォルトの名無しさん
2019/07/17(水) 23:47:22.37ID:ycSiezB+ このラムダは食べられないよ。ラムダこりゃ〜
299デフォルトの名無しさん
2019/07/17(水) 23:56:54.05ID:Lq1+nMLH >>297
楽しみにしております ^ ^;
楽しみにしております ^ ^;
300デフォルトの名無しさん
2019/07/18(木) 11:57:22.02ID:BkvY1rKv >>297
本物のラムダ計算はよ。
本物のラムダ計算はよ。
301デフォルトの名無しさん
2019/07/18(木) 11:58:54.05ID:832IkKkF いくら待ってもムラダ。
302デフォルトの名無しさん
2019/07/18(木) 14:21:32.04ID:BkvY1rKv なんだ虚勢だったのか。
303デフォルトの名無しさん
2019/07/18(木) 17:02:47.87ID:ugDCzjFC シェルスクリプトでラムダ式ってどんな場面で便利なの?
普通に関数定義すれば事足りると思うんだけどな
普通に関数定義すれば事足りると思うんだけどな
304デフォルトの名無しさん
2019/07/18(木) 17:23:35.77ID:vfPv5uwZ https://www.sejuku.net/blog/23677#lambda
> #lambda式を使わずに通常の関数を用いる場合
> def func(price,tax):
> return price + (price * tax)
>
> payment1 = func(100,0.08)
> print(payment1)
>
> #lambda式を用いる場合
> print((lambda price,tax:price + (price * tax))(100,0.08))
よくわからんのでコレをサンプル。
price?tax? シェルスクリプトにとって引数とは$1, $2,・・・固定なんだよな。省略かな?w
echo "$(lambda '$1 + ($1 * $2)' 100 0.08)"
イメージ的にはこんな感じか。少数の計算があるんでbc使わなきゃいけないので動くように直すと
lambda() {
formula="$1"
shift
echo "$(eval "$formula")"
}
echo "$(lambda 'echo "$1 + ($1 * $2)" | bc' 100 0.08)"
一発で普通に動いたわw
シェルスクリプトにとって戻り値=出力なんでこうかけるし、
あとbcの使いづらいのをどうにかすればこんな感じでかけるだろう
lambda 'calc "$1 + ($1 * $2)"' 100 0.08
> #lambda式を使わずに通常の関数を用いる場合
> def func(price,tax):
> return price + (price * tax)
>
> payment1 = func(100,0.08)
> print(payment1)
>
> #lambda式を用いる場合
> print((lambda price,tax:price + (price * tax))(100,0.08))
よくわからんのでコレをサンプル。
price?tax? シェルスクリプトにとって引数とは$1, $2,・・・固定なんだよな。省略かな?w
echo "$(lambda '$1 + ($1 * $2)' 100 0.08)"
イメージ的にはこんな感じか。少数の計算があるんでbc使わなきゃいけないので動くように直すと
lambda() {
formula="$1"
shift
echo "$(eval "$formula")"
}
echo "$(lambda 'echo "$1 + ($1 * $2)" | bc' 100 0.08)"
一発で普通に動いたわw
シェルスクリプトにとって戻り値=出力なんでこうかけるし、
あとbcの使いづらいのをどうにかすればこんな感じでかけるだろう
lambda 'calc "$1 + ($1 * $2)"' 100 0.08
305デフォルトの名無しさん
2019/07/18(木) 17:25:39.32ID:Nv4mVpEC bash の mapfile にある callback みたいなもん?
306デフォルトの名無しさん
2019/07/18(木) 19:06:15.61ID:ugDCzjFC 数値計算ならbcに直接渡すし
文字列を加工するラムダ式はbcで処理できないし
必要性を感じたことないんだよね
文字列を加工するラムダ式はbcで処理できないし
必要性を感じたことないんだよね
307デフォルトの名無しさん
2019/07/18(木) 19:08:03.03ID:BkvY1rKv308デフォルトの名無しさん
2019/07/18(木) 19:17:03.16ID:DPDlMznj >>307
へ?数値計算に限定するならもっとシンプルに書けるよ
これだけにできる
lambda '$1 + ($1 * $2)"' 100 0.08
数値計算に限定してないから呼び出し側にechoとかbcが埋め込まれてるんだけど?
へ?数値計算に限定するならもっとシンプルに書けるよ
これだけにできる
lambda '$1 + ($1 * $2)"' 100 0.08
数値計算に限定してないから呼び出し側にechoとかbcが埋め込まれてるんだけど?
309デフォルトの名無しさん
2019/07/18(木) 19:21:15.11ID:DPDlMznj310デフォルトの名無しさん
2019/07/18(木) 19:28:37.52ID:DPDlMznj ラムダで用いる計算式は通常短くなるから、
$1, $2 であっても分かりづらくなることはないだろうが
もともとの人は変数をどうすべきかって言ってたから書くと
lambda 'calc "$1 + ($1 * $2)"' 100 0.08
は
lambda v1 v2 -- 'calc "$v1 + ($v1 * $v2)"' 100 0.08
ってやろうと思えばやれる。変数に入れてからevalすればいいだけだから
それが>>294で書いたこと。--で区切るのが面倒だと思えばこういう書き方もありだろう
lambda v1:v2 'calc "$v1 + ($v1 * $v2)"' 100 0.08
第一引数が:で区切られた変数名、第二引数が計算式、残りが引数と簡単に見分けられる
$1, $2 であっても分かりづらくなることはないだろうが
もともとの人は変数をどうすべきかって言ってたから書くと
lambda 'calc "$1 + ($1 * $2)"' 100 0.08
は
lambda v1 v2 -- 'calc "$v1 + ($v1 * $v2)"' 100 0.08
ってやろうと思えばやれる。変数に入れてからevalすればいいだけだから
それが>>294で書いたこと。--で区切るのが面倒だと思えばこういう書き方もありだろう
lambda v1:v2 'calc "$v1 + ($v1 * $v2)"' 100 0.08
第一引数が:で区切られた変数名、第二引数が計算式、残りが引数と簡単に見分けられる
311デフォルトの名無しさん
2019/07/18(木) 19:41:15.10ID:DPDlMznj 数値限定で引数全てに計算式を適用して返す例(笑)
map() {
formula="$1"
shift
while [ $# -gt 0 ]; do
eval "echo \$(($formula))"
shift
done
}
map '$1 * $1' 1 2 3
map() {
formula="$1"
shift
while [ $# -gt 0 ]; do
eval "echo \$(($formula))"
shift
done
}
map '$1 * $1' 1 2 3
312デフォルトの名無しさん
2019/07/18(木) 19:53:59.13ID:ugDCzjFC 書き方が煩雑になるだけでメリットないんじゃね
やりたいこと素直に書けばいいじゃんって思ってしまう
やりたいこと素直に書けばいいじゃんって思ってしまう
313デフォルトの名無しさん
2019/07/18(木) 19:54:42.45ID:DPDlMznj まあ、それはラムダ計算そのものが言われていることだからw
シェルスクリプトの話ではないね。
シェルスクリプトの話ではないね。
314デフォルトの名無しさん
2019/07/18(木) 20:03:10.85ID:ugDCzjFC ラムダ式って簡潔に書けるのがメリットでしょ
コード量増えるのなら本末転倒だよね
コード量増えるのなら本末転倒だよね
315デフォルトの名無しさん
2019/07/18(木) 20:09:12.09ID:DPDlMznj 簡潔に書けてるよw
map '$1 * $1' 1 2 3
ただ違うのはシェルスクリプトにはそれようのライブラリがないだけ
ここで例示したようなmapみたいなライブラリ集ができたら
もっと便利になると思う
map '$1 * $1' 1 2 3
ただ違うのはシェルスクリプトにはそれようのライブラリがないだけ
ここで例示したようなmapみたいなライブラリ集ができたら
もっと便利になると思う
316デフォルトの名無しさん
2019/07/18(木) 20:15:16.65ID:DPDlMznj というか、普通の言語のラムダ式だと、こんな感じで変数が出てくるけど
lambda a, b : a + b
引数名が$1, $2と数字固定だから変数宣言が不要になるんだよな
lambda a, b : a + b がシェルスクリプトだと
lambda '$1 + $2' だけになっちゃう
i = (lambda a, b: a + b)(1, 2) はシェルスクリプトだと
i=$(lambda '$1 + $2' 1 2) こうなる
lambda a, b : a + b
引数名が$1, $2と数字固定だから変数宣言が不要になるんだよな
lambda a, b : a + b がシェルスクリプトだと
lambda '$1 + $2' だけになっちゃう
i = (lambda a, b: a + b)(1, 2) はシェルスクリプトだと
i=$(lambda '$1 + $2' 1 2) こうなる
317デフォルトの名無しさん
2019/07/18(木) 20:17:43.55ID:ugDCzjFC クロージャの概念がないシェルスクリプトは
ラムダ式の真価を発揮する場面は無いだろうね
ラムダ式の真価を発揮する場面は無いだろうね
318デフォルトの名無しさん
2019/07/18(木) 20:22:14.60ID:DPDlMznj 無いっていうのは出来ないんじゃなくて
用意されてないって意味だけどな
実はPOSIX標準でも一つだけクロージャーが使われてる。
それがtrap
trap 'echo trapped; exit 1' INT
みたいな書き方ができる
用意されてないって意味だけどな
実はPOSIX標準でも一つだけクロージャーが使われてる。
それがtrap
trap 'echo trapped; exit 1' INT
みたいな書き方ができる
319デフォルトの名無しさん
2019/07/18(木) 20:55:40.78ID:BkvY1rKv ていうか(ほぼ暴論だけど)シェルスクリプトだってオブジェクト思考っぽいことはできる訳だし
単に「向いている処理」「向いていない処理」があるってだけ。
シェルスクリプトでラムダ式は書けるけど、シェルスクリプトはラムダ式を扱うのには向いていない。
単に「向いている処理」「向いていない処理」があるってだけ。
シェルスクリプトでラムダ式は書けるけど、シェルスクリプトはラムダ式を扱うのには向いていない。
320デフォルトの名無しさん
2019/07/18(木) 21:16:40.14ID:DPDlMznj そんな難しく考えるなよw
trapの例もあるんだし、使うのが適切な場合に使えば良いいんだよ
trapの例もあるんだし、使うのが適切な場合に使えば良いいんだよ
321デフォルトの名無しさん
2019/07/18(木) 21:28:25.20ID:KBi6m+gV map は意外と使い道がないんだよな
lisp 以外では意外と実装されていない
lisp 以外では意外と実装されていない
322デフォルトの名無しさん
2019/07/18(木) 21:33:57.01ID:DPDlMznj 実装されてない言語のほうが珍しいだろw
323デフォルトの名無しさん
2019/07/18(木) 21:36:48.83ID:DPDlMznj mapがある言語
Python、Ruby、Perl、JavaScript、C#(LINQのSelect)
思いついたものだけ
Python、Ruby、Perl、JavaScript、C#(LINQのSelect)
思いついたものだけ
324デフォルトの名無しさん
2019/07/18(木) 21:42:27.79ID:ugDCzjFC trapってただのイベントハンドラだよ
引数渡したり戻り値受け取ったりできないじゃん
引数渡したり戻り値受け取ったりできないじゃん
325デフォルトの名無しさん
2019/07/18(木) 21:52:45.54ID:DPDlMznj trapはイベントハンドラじゃない。
シグナルに対してイベントハンドラを設定するもの
引き数渡したり戻り値受け取ったり出来ないのは
trapの制限であってイベントハンドラの制限じゃない
シグナルに対してイベントハンドラを設定するもの
引き数渡したり戻り値受け取ったり出来ないのは
trapの制限であってイベントハンドラの制限じゃない
326デフォルトの名無しさん
2019/07/18(木) 22:00:05.94ID:ugDCzjFC 言いたいのはクロージャの話してるのにtrap 持ってくるのは筋違いってことだ
327デフォルトの名無しさん
2019/07/18(木) 22:03:45.58ID:DPDlMznj 別に筋違いでもない。戻り値は(標準)出力と上で書いたが、
trapで出力したものは画面に表示される。
trapで出力したものは画面に表示される。
328デフォルトの名無しさん
2019/07/18(木) 23:59:39.80ID:SGv/emwF 「mapは意外と使い道がない!lisp以外では意外と実装されていない!!(キリッ」
329デフォルトの名無しさん
2019/07/19(金) 01:30:43.88ID:/UdqfCLD 正直>>321のmapの話は無知だなと思ったけど(めちゃめちゃ実装言語があるので)
そうやって煽ることしかできない君より100万倍有意義な発言だったよ。
そうやって煽ることしかできない君より100万倍有意義な発言だったよ。
330デフォルトの名無しさん
2019/07/19(金) 01:49:27.68ID:7Hdy7m6i >>323
Kotlin もよろしく
Kotlin もよろしく
331デフォルトの名無しさん
2019/07/19(金) 02:44:48.56ID:ApXEphk2 map 縛ると高階関数で書きにくい
332デフォルトの名無しさん
2019/07/19(金) 08:55:46.76ID:MqWaI42B333デフォルトの名無しさん
2019/07/19(金) 09:10:54.61ID:mIHotaYe 第13話 本物のラムダ計算(完)
334デフォルトの名無しさん
2019/07/19(金) 10:16:54.74ID:uab/wKdg Cだとqsort()とかがラムダになるのかな。
335デフォルトの名無しさん
2019/07/19(金) 10:47:40.54ID:pw5qcQRZ map が有効な例はどんな時?
336デフォルトの名無しさん
2019/07/19(金) 11:16:36.30ID:ApXEphk2 集合XからYに写像を持つ関数fがあれば
Y = f(X) と書ける
これを満たす x, yは
y = f(x) で表わせる
数学だとこんなかんじだが
プログラムなら
Y = map f X のような感じでいっきに変換できる
map 使わないで、古典的なループを書くと
for my $x (@X) {push @Y, &f(x)}
のような具合になるが、x, push など本来不要な変数や操作を中継するため
コードが肥大化する
Y = f(X) と書ける
これを満たす x, yは
y = f(x) で表わせる
数学だとこんなかんじだが
プログラムなら
Y = map f X のような感じでいっきに変換できる
map 使わないで、古典的なループを書くと
for my $x (@X) {push @Y, &f(x)}
のような具合になるが、x, push など本来不要な変数や操作を中継するため
コードが肥大化する
337デフォルトの名無しさん
2019/07/19(金) 11:33:07.63ID:/UdqfCLD338デフォルトの名無しさん
2019/07/19(金) 11:37:49.93ID:/UdqfCLD339デフォルトの名無しさん
2019/07/19(金) 11:47:33.02ID:/UdqfCLD340デフォルトの名無しさん
2019/07/19(金) 12:35:59.70ID:mIHotaYe >>339
perlのsortの場合、$a、$b固定になってる
https://perldoc.jp/func/sort
my @articles = sort {$a cmp $b} @files;
perlの場合、関数の引数は$_[0]、$_[1]で取れるのだが
そうすると、sortの外の$_[0]、$_[1]になってしまう。
文字列にしてevalしちゃえば同じことはできると思うがそれでも長くなっちゃうしな。
my @articles = sort '$_[0] cmp$_[1]' @files;
このために$a、$bをグローバル変数としているようだが、Perlはダイナミックスコープを
使えるからローカル変数にできるんじゃないかな? 互換性のためにそうなっているのかも
perlのsortの場合、$a、$b固定になってる
https://perldoc.jp/func/sort
my @articles = sort {$a cmp $b} @files;
perlの場合、関数の引数は$_[0]、$_[1]で取れるのだが
そうすると、sortの外の$_[0]、$_[1]になってしまう。
文字列にしてevalしちゃえば同じことはできると思うがそれでも長くなっちゃうしな。
my @articles = sort '$_[0] cmp$_[1]' @files;
このために$a、$bをグローバル変数としているようだが、Perlはダイナミックスコープを
使えるからローカル変数にできるんじゃないかな? 互換性のためにそうなっているのかも
341デフォルトの名無しさん
2019/07/19(金) 14:53:58.91ID:pw5qcQRZ342デフォルトの名無しさん
2019/07/19(金) 15:35:22.89ID:uab/wKdg >>341
有り難いと言うか、記述が短くなったり、余計な変数を使わなくてよくなったり、連結して書けて分かりやすくなったりという利点があるかな。
有り難いと言うか、記述が短くなったり、余計な変数を使わなくてよくなったり、連結して書けて分かりやすくなったりという利点があるかな。
343デフォルトの名無しさん
2019/07/19(金) 15:43:06.00ID:ApXEphk2 >>341
集合を扱うのに適した型がない言語、perl などを例にすると
後ろの方を見るのに時間がかかる大きなリスト素早く参照するハックとして
>271
のようにハッシュに打ちこむ手法がある
シェルスクリプトのワンライナーだと1行ずつ入ってくるけど
perl コード内なら簡潔に書けるし、たぶん map の部分が C で書かれてて
速度が出ることが覆い
このタイプの高速な手法としてはシュワルツ変換が有名
|sort -k 2,2
に相当するやつ
集合を扱うのに適した型がない言語、perl などを例にすると
後ろの方を見るのに時間がかかる大きなリスト素早く参照するハックとして
>271
のようにハッシュに打ちこむ手法がある
シェルスクリプトのワンライナーだと1行ずつ入ってくるけど
perl コード内なら簡潔に書けるし、たぶん map の部分が C で書かれてて
速度が出ることが覆い
このタイプの高速な手法としてはシュワルツ変換が有名
|sort -k 2,2
に相当するやつ
344デフォルトの名無しさん
2019/07/19(金) 16:04:19.10ID:S0JoFjeS345デフォルトの名無しさん
2019/07/19(金) 17:47:07.68ID:mIHotaYe346デフォルトの名無しさん
2019/07/19(金) 19:32:30.99ID:LTHpRmEj ていうかシェルスクリプトの関数って(少なくともPOSIXの範囲では)広域定義で
システムのコマンドと同じ名前空間(名前空間なんて一つしかないけど)で定義するしかない。
だからラムダ式に代表される無名関数は寧ろシェルスクリプトのような言語で重宝するかも知れない。
でも可読性や保守性を考えると一般的でない書き方なので多用は控えたほうがいいかな。
システムのコマンドと同じ名前空間(名前空間なんて一つしかないけど)で定義するしかない。
だからラムダ式に代表される無名関数は寧ろシェルスクリプトのような言語で重宝するかも知れない。
でも可読性や保守性を考えると一般的でない書き方なので多用は控えたほうがいいかな。
347デフォルトの名無しさん
2019/07/20(土) 02:10:15.33ID:RMeQOh+3 >>345
もちろんそのリンク先に書いてある。……下から 21 行目に。(空行を除く)
もちろんそのリンク先に書いてある。……下から 21 行目に。(空行を除く)
348デフォルトの名無しさん
2019/07/23(火) 15:21:00.97ID:vatz3/hX シェルスクリプトで引数が整数であることを判定する可搬で高速な方法ってなんだろう
思い付いたのは
isint() {
case "$1" in
[0-9][0-9]*) printf '%d\n' $1 ;;
*) return 22 ;;
esac
}
…ところで$1がないときは標準入力から値を取得するっていう操作ってどう実装するんだろう?
思い付いたのは
isint() {
case "$1" in
[0-9][0-9]*) printf '%d\n' $1 ;;
*) return 22 ;;
esac
}
…ところで$1がないときは標準入力から値を取得するっていう操作ってどう実装するんだろう?
349デフォルトの名無しさん
2019/07/23(火) 15:29:05.59ID:+7TCISw6 >>348
標準入力かどうかは
けっこうシェルスクリプトとperlは同じような書き方する部分があるから
こんな構文がありそうだ
https://pastebin.com/0wXLeenr
あとそれだと負の数が抜けてる。数字の前に マイナス記号がついている可能性がある
標準入力かどうかは
けっこうシェルスクリプトとperlは同じような書き方する部分があるから
こんな構文がありそうだ
https://pastebin.com/0wXLeenr
あとそれだと負の数が抜けてる。数字の前に マイナス記号がついている可能性がある
350デフォルトの名無しさん
2019/07/23(火) 15:31:44.56ID:ecacfG7E case $1 in # $1にダブルクォートはいらない
*[!0-9]* ) ;; # 数字以外が含まれている = 整数ではない
*) ;; # それ以外 = 整数である
esac
if [ $# -eq 0 ]; then
read -r data
else
data=$1
fi
とかいろいろ
*[!0-9]* ) ;; # 数字以外が含まれている = 整数ではない
*) ;; # それ以外 = 整数である
esac
if [ $# -eq 0 ]; then
read -r data
else
data=$1
fi
とかいろいろ
351デフォルトの名無しさん
2019/07/23(火) 15:32:56.13ID:ecacfG7E > 数字の前に マイナス記号がついている可能性がある
case ${1#-} in
こうすればよい
case ${1#-} in
こうすればよい
352デフォルトの名無しさん
2019/07/23(火) 15:36:47.54ID:ecacfG7E $1があるかどうかじゃなくて、echoなどで流し込まれているかどうかなら
if [ -t 0 ]; then
# 流し込まれてなどいない
else
# 流し込まれている
fi
if [ -t 0 ]; then
# 流し込まれてなどいない
else
# 流し込まれている
fi
353デフォルトの名無しさん
2019/07/23(火) 15:43:42.61ID:ecacfG7E 所でcaseって戻り値を返すって知ってる?
isint() {
case $1 in
*[!0-9]* ) false ;;
*) true ;;
esac
}
if isint 1; then
echo int
fi
とか、
if case $1 in *[!0-9]* ) false ;; *) true ;; esac; then
echo int
fi
とか
if ! case $1 in *[!0-9]* ) false; esac; then
echo int
fi
とか書けるよ
isint() {
case $1 in
*[!0-9]* ) false ;;
*) true ;;
esac
}
if isint 1; then
echo int
fi
とか、
if case $1 in *[!0-9]* ) false ;; *) true ;; esac; then
echo int
fi
とか
if ! case $1 in *[!0-9]* ) false; esac; then
echo int
fi
とか書けるよ
354デフォルトの名無しさん
2019/07/23(火) 15:47:46.96ID:ecacfG7E > if ! case $1 in *[!0-9]* ) false; esac; then
間違えたw !いらない
最短かな?
if case $1 in *[!0-9]*) false; esac; then
echo int
fi
ワンライナーw
isint() { case $1 in *[!0-9]*) false; esac; }
間違えたw !いらない
最短かな?
if case $1 in *[!0-9]*) false; esac; then
echo int
fi
ワンライナーw
isint() { case $1 in *[!0-9]*) false; esac; }
355デフォルトの名無しさん
2019/07/23(火) 15:50:04.40ID:ecacfG7E あ、空文字のときにintになるね。こうすればよい
isint() { case $1 in ''|*[!0-9]*) false; esac; }
isint() { case $1 in ''|*[!0-9]*) false; esac; }
356デフォルトの名無しさん
2019/07/23(火) 15:50:25.78ID:h7ECSrMt expr "$1" + 0 >/dev/null 2>&1
echo $?
というのもありかと思ったけど、MAXINT(2^32or2^64)以上になると
エラーになる(exit status 3)からダメか
echo $?
というのもありかと思ったけど、MAXINT(2^32or2^64)以上になると
エラーになる(exit status 3)からダメか
357348
2019/07/23(火) 16:11:28.72ID:vatz3/hX みなさんありがとうございます。
↓助言を参考にさしてもらってこういう形にしました。
isint() { set -- "$1"
case ${1#-} in
''|*[!0-9]*) return 22 ;;
*) true ;;
esac
}
「$1が設定されていなければ標準入力を$1に」というのはシェルスクリプトでは
実現が難しそうなので諦めます。
↓助言を参考にさしてもらってこういう形にしました。
isint() { set -- "$1"
case ${1#-} in
''|*[!0-9]*) return 22 ;;
*) true ;;
esac
}
「$1が設定されていなければ標準入力を$1に」というのはシェルスクリプトでは
実現が難しそうなので諦めます。
358デフォルトの名無しさん
2019/07/23(火) 16:12:19.43ID:ecacfG7E if case $1 in *[!0-9]*) false; esac; then
echo int
fi
こっちのほうが短いかw
case $1 in *[!0-9]*) :;; *)
echo int
esac
echo int
fi
こっちのほうが短いかw
case $1 in *[!0-9]*) :;; *)
echo int
esac
359348
2019/07/23(火) 16:15:37.53ID:vatz3/hX ……と思いましたが良い感じの構文を思い付きました。
isint() { set -- "${1:-"$(cat)"}"
case ${1#-} in
''|*[!0-9]*) return 22 ;;
*) true ;;
esac
}
これでどうでしょうかね。もし$1が設定されていなければcat(1)が実行されて
cat(1)には引数が渡っていない(この時は$1が設定されていない)ので
If no file operands are specified, the standard input shall be used.
(http://pubs.opengroup.org/onlinepubs/9699919799/utilities/cat.html)
に従って標準入力が読み込まれてset -- 〈標準入力の内容〉となって$1に標準入力が設定される。
isint() { set -- "${1:-"$(cat)"}"
case ${1#-} in
''|*[!0-9]*) return 22 ;;
*) true ;;
esac
}
これでどうでしょうかね。もし$1が設定されていなければcat(1)が実行されて
cat(1)には引数が渡っていない(この時は$1が設定されていない)ので
If no file operands are specified, the standard input shall be used.
(http://pubs.opengroup.org/onlinepubs/9699919799/utilities/cat.html)
に従って標準入力が読み込まれてset -- 〈標準入力の内容〉となって$1に標準入力が設定される。
360デフォルトの名無しさん
2019/07/23(火) 16:15:43.02ID:ecacfG7E trueはさっき俺が書いたけど、別にいらない
isint() { set -- "$1"
case ${1#-} in
''|*[!0-9]*) return 22
esac
}
> 「$1が設定されていなければ標準入力を$1に」というのはシェルスクリプトでは
こっちも書いたはずだが? cat "$1" or cat "/dev/stdin" の話でもしてたのか?
isint() { set -- "$1"
case ${1#-} in
''|*[!0-9]*) return 22
esac
}
> 「$1が設定されていなければ標準入力を$1に」というのはシェルスクリプトでは
こっちも書いたはずだが? cat "$1" or cat "/dev/stdin" の話でもしてたのか?
361デフォルトの名無しさん
2019/07/23(火) 16:16:28.44ID:ecacfG7E cat呼び出しは遅いから、read使ったんだが?
362デフォルトの名無しさん
2019/07/23(火) 17:17:45.59ID:vatz3/hX >>361
申し訳ないです。完全に見落してました。
申し訳ないです。完全に見落してました。
363デフォルトの名無しさん
2019/07/23(火) 23:34:58.45ID:JEktaXSk npmでシェルスクリプトだけのパッケージを配布してもOKですか?
364デフォルトの名無しさん
2019/07/24(水) 01:15:44.75ID:ArGZw8p9 npmスレに。
365デフォルトの名無しさん
2019/07/24(水) 21:22:10.25ID:ArGZw8p9 >>361
catとreadってたった一行読み込むのにそんな差ある?
catとreadってたった一行読み込むのにそんな差ある?
366デフォルトの名無しさん
2019/07/25(木) 02:49:23.09ID:WafvXnG3 1行だからcatが遅いんだろ
367デフォルトの名無しさん
2019/07/25(木) 02:51:27.80ID:muDuQw8n ついcatなって言った
368デフォルトの名無しさん
2019/07/25(木) 08:46:34.39ID:m8sWcejF こawkあいはしていない。
369デフォルトの名無しさん
2019/07/25(木) 14:59:51.08ID:VsjL1nxe sedで質問です。
置換前
(a0b1c2=99999) (a0b1c2=00000)
置換後
DATA1=99999 DATA2=00000
こんな感じに置換したいです。
カッコと接頭辞みたいなのを除去した上で、
行の1つめはDATA1に、2つめはDATA2に置換したいという意味です。
何卒ご教示ください。
置換前
(a0b1c2=99999) (a0b1c2=00000)
置換後
DATA1=99999 DATA2=00000
こんな感じに置換したいです。
カッコと接頭辞みたいなのを除去した上で、
行の1つめはDATA1に、2つめはDATA2に置換したいという意味です。
何卒ご教示ください。
370デフォルトの名無しさん
2019/07/25(木) 15:04:52.21ID:D8pzUtDE (
[a-zA-Z0-9]
=
[0-9]+
)
こんな形のデータか?
[a-zA-Z0-9]
=
[0-9]+
)
こんな形のデータか?
371デフォルトの名無しさん
2019/07/25(木) 15:09:40.46ID:D8pzUtDE 暫定これ
echo "(a0b1c2=99999) (a0b1c2=00000)" | sed -n 's/([a-zA-Z0-9]\+=\([0-9]\+\)) ([a-zA-Z0-9]\+=\([0-9]\+\))/DATA1=\1 DATA2=\2/gp'
DATA1=99999 DATA2=00000
echo "(a0b1c2=99999) (a0b1c2=00000)" | sed -n 's/([a-zA-Z0-9]\+=\([0-9]\+\)) ([a-zA-Z0-9]\+=\([0-9]\+\))/DATA1=\1 DATA2=\2/gp'
DATA1=99999 DATA2=00000
372デフォルトの名無しさん
2019/07/25(木) 15:11:16.41ID:VsjL1nxe >>370
すいません、話を簡単にするため>>369は端折ったんですが、
端折らない方がよさそうなので元データそのまま書きます。
わかる人にはわかるかもしれませんが、VMwareのAPIから取ってきた値です。
guest(01) %!s(int32=110) %!s(int32=3625)
これは左からゲスト名、各ゲストのCPU使用量(MHz)、メモリ使用量(MB)です。
これを
guest(01) CPU=110 Memory=3625
こんな感じにしたいなと思っています。
最初はsedの単純な置換とパイプで何とかしようとしたんですが、
ゲスト名にもカッコが使われてる(のが除去されちゃう)という部分が回避できませんでした。
すいません、話を簡単にするため>>369は端折ったんですが、
端折らない方がよさそうなので元データそのまま書きます。
わかる人にはわかるかもしれませんが、VMwareのAPIから取ってきた値です。
guest(01) %!s(int32=110) %!s(int32=3625)
これは左からゲスト名、各ゲストのCPU使用量(MHz)、メモリ使用量(MB)です。
これを
guest(01) CPU=110 Memory=3625
こんな感じにしたいなと思っています。
最初はsedの単純な置換とパイプで何とかしようとしたんですが、
ゲスト名にもカッコが使われてる(のが除去されちゃう)という部分が回避できませんでした。
373デフォルトの名無しさん
2019/07/25(木) 15:20:38.81ID:D8pzUtDE echo 'guest(01) %!s(int32=110) %!s(int32=3625)' | sed -n 's/\S\+([a-zA-Z0-9]\+=\([0-9]\+\)) \S\+([a-zA-Z0-9]\+=\([0-9]\+\))/DATA1=\1 DATA2=\2/gp'
guest(01) DATA1=110 DATA2=3625
これで間にあう?
guest(01) DATA1=110 DATA2=3625
これで間にあう?
374デフォルトの名無しさん
2019/07/25(木) 15:22:34.93ID:D8pzUtDE 失礼しました
最後のCPU, Memoryに書きかえて
echo 'guest(01) %!s(int32=110) %!s(int32=3625)' | sed -e 's/\S\+([a-zA-Z0-9]\+=\([0-9]\+\)) \S\+([a-zA-Z0-9]\+=\([0-9]\+\))/CPU=\1 Memory=\2/g'
guest(01) CPU=110 Memory=3625
最後のCPU, Memoryに書きかえて
echo 'guest(01) %!s(int32=110) %!s(int32=3625)' | sed -e 's/\S\+([a-zA-Z0-9]\+=\([0-9]\+\)) \S\+([a-zA-Z0-9]\+=\([0-9]\+\))/CPU=\1 Memory=\2/g'
guest(01) CPU=110 Memory=3625
375デフォルトの名無しさん
2019/07/25(木) 15:27:23.74ID:hsvk8oNq >>361
パイプにテキストファイルの中身を流し込んで逐次処理するとき、
cat "hoge.txt" | 〜 のほかに、
echo $(< "hoge.txt") | 〜 とか、
lessなどのページャー読み込みでもできるけど、
どうするかいつも悩むなぁ。
grepなどの、ファイル読み込みオプションのあるコマンドが先頭ならそれを使えばいいけど、
そうでない場合は、みんなどうしてる?
パイプにテキストファイルの中身を流し込んで逐次処理するとき、
cat "hoge.txt" | 〜 のほかに、
echo $(< "hoge.txt") | 〜 とか、
lessなどのページャー読み込みでもできるけど、
どうするかいつも悩むなぁ。
grepなどの、ファイル読み込みオプションのあるコマンドが先頭ならそれを使えばいいけど、
そうでない場合は、みんなどうしてる?
376デフォルトの名無しさん
2019/07/25(木) 15:44:25.16ID:qx5YGZv4 >>375
何故 < hoge.txt じゃ駄目なの?
何故 < hoge.txt じゃ駄目なの?
377デフォルトの名無しさん
2019/07/25(木) 15:57:19.67ID:VsjL1nxe378デフォルトの名無しさん
2019/07/25(木) 17:02:25.09ID:hsvk8oNq >>376
複数のパイプを繋げた逐次処理の場合に、
処理元のファイルが何であるかを明確にしたいので、
すべてのパイプの先頭に持っていきたいんだよ。
ファイル読み込み | 処理1 | 処理2 | 処理3…
複数のパイプを繋げた逐次処理の場合に、
処理元のファイルが何であるかを明確にしたいので、
すべてのパイプの先頭に持っていきたいんだよ。
ファイル読み込み | 処理1 | 処理2 | 処理3…
379デフォルトの名無しさん
2019/07/25(木) 17:18:56.17ID:vvE0ECJG 俺なら
< hoge.txt cmd1 | cmd2 | cmd3 ...
と書く
< hoge.txt cmd1 | cmd2 | cmd3 ...
と書く
380デフォルトの名無しさん
2019/07/25(木) 17:34:33.11ID:hsvk8oNq >>379
ほぉ、リダイレクトって、コマンドの前にもってこれるんだ。ありがとう。
これならとりあえず、ソースを明確にできるね。
しかもおそらく一番処理が速いかな。
catを使った方法のような、単に読み込むだけのコマンドの高速版みたいなのはないのかなぁ。
ほぉ、リダイレクトって、コマンドの前にもってこれるんだ。ありがとう。
これならとりあえず、ソースを明確にできるね。
しかもおそらく一番処理が速いかな。
catを使った方法のような、単に読み込むだけのコマンドの高速版みたいなのはないのかなぁ。
381デフォルトの名無しさん
2019/07/25(木) 18:20:54.41ID:D8pzUtDE >>377
正規表現は実行可能な回戦ノイズになりやすいから、
複雑なものは、可能なら perl を薦める
バックスラッシュの頻度も下がり、空白で単位ごとに分けられ読みやすい
echo 'guest(01) %!s(int32=110) %!s(int32=3625)' | perl -pe 's{ \S+ \( [a-zA-Z0-9]+ = ([0-9]+) \) \N{SPACE} \S+ \( [a-zA-Z0-9]+ = ([0-9]+) \) }{CPU=$1 Memory=$2}xg'
guest(01) CPU=110 Memory=3625
sedの正規表現にはいくつか注意すべきことがあると思う
match部の
( が 文字どおりの ( にマッチする
\( が あとで \1 \2 で使う為のキャプチャの括弧になる。
\+ が1つ以上の という個数指定になる
正規表現は実行可能な回戦ノイズになりやすいから、
複雑なものは、可能なら perl を薦める
バックスラッシュの頻度も下がり、空白で単位ごとに分けられ読みやすい
echo 'guest(01) %!s(int32=110) %!s(int32=3625)' | perl -pe 's{ \S+ \( [a-zA-Z0-9]+ = ([0-9]+) \) \N{SPACE} \S+ \( [a-zA-Z0-9]+ = ([0-9]+) \) }{CPU=$1 Memory=$2}xg'
guest(01) CPU=110 Memory=3625
sedの正規表現にはいくつか注意すべきことがあると思う
match部の
( が 文字どおりの ( にマッチする
\( が あとで \1 \2 で使う為のキャプチャの括弧になる。
\+ が1つ以上の という個数指定になる
382デフォルトの名無しさん
2019/07/25(木) 18:41:30.57ID:m8sWcejF ……Perlも十分読み難いと思うのは俺だけだろうか…
383デフォルトの名無しさん
2019/07/25(木) 18:52:29.83ID:I5POGkj3 perl が使えるような環境なら sed -E 使えるんじゃね?
384デフォルトの名無しさん
2019/07/25(木) 19:47:46.86ID:D8pzUtDE >>382
もっと分かりやすそうに書いてみた
今度はどうだ?
echo 'guest(01) %!s(int32=110) %!s(int32=3625)' | perl -pe ' $pattern = q{ \S+ \( [a-zA-Z0-9]+ = ([0-9]+) \) } ; s/$pattern \N{SPACE} $pattern/CPU=$1 Memory=$2/x'
guest(01) CPU=110 Memory=3625
もっと分かりやすそうに書いてみた
今度はどうだ?
echo 'guest(01) %!s(int32=110) %!s(int32=3625)' | perl -pe ' $pattern = q{ \S+ \( [a-zA-Z0-9]+ = ([0-9]+) \) } ; s/$pattern \N{SPACE} $pattern/CPU=$1 Memory=$2/x'
guest(01) CPU=110 Memory=3625
385デフォルトの名無しさん
2019/07/25(木) 21:09:49.52ID:AjtfUs9C386デフォルトの名無しさん
2019/07/25(木) 22:22:57.77ID:1GqrqsZl これぐらいのの複雑さになると、perl でちゃんと改行、インデントして
書いた方がいいような気がする
書いた方がいいような気がする
387デフォルトの名無しさん
2019/07/26(金) 00:44:50.95ID:16gdYth6 シェルスクリプトは関数型だとかアホなこと言ってるブログがあった
388デフォルトの名無しさん
2019/07/26(金) 10:46:37.80ID:54Ib42km Ruby では、
def get_value( str ) # = ) の間にある文字列を取得する
pos_1 = str.rindex "=" # 文字を末尾から探す
pos_2 = str.rindex ")"
str[ pos_1 + 1 ... pos_2 ]
end
str = 'guest(01) %!s(int32=110) %!s(int32=3625)'
ary = str.split # 空白で区切る
# ["guest(01)", "%!s(int32=110)", "%!s(int32=3625)"]
puts "#{ ary[ 0 ] } CPU=#{ get_value( ary[ 1 ] ) } Memory=#{ get_value( ary[ 2 ] ) }"
# guest(01) CPU=110 Memory=3625
1-liner では、
ただし、途中で改行したので、1行にしてください!
echo 'guest(01) %!s(int32=110) %!s(int32=3625)' | ruby -ne 'def get_value( str ) pos_1 = str.rindex "="; pos_2 = str.rindex ")"; str[ pos_1 + 1 ... pos_2 ] end;
ary = $_.split; puts "#{ ary[ 0 ] } CPU=#{ get_value( ary[ 1 ] ) } Memory=#{ get_value( ary[ 2 ] ) }"'
def get_value( str ) # = ) の間にある文字列を取得する
pos_1 = str.rindex "=" # 文字を末尾から探す
pos_2 = str.rindex ")"
str[ pos_1 + 1 ... pos_2 ]
end
str = 'guest(01) %!s(int32=110) %!s(int32=3625)'
ary = str.split # 空白で区切る
# ["guest(01)", "%!s(int32=110)", "%!s(int32=3625)"]
puts "#{ ary[ 0 ] } CPU=#{ get_value( ary[ 1 ] ) } Memory=#{ get_value( ary[ 2 ] ) }"
# guest(01) CPU=110 Memory=3625
1-liner では、
ただし、途中で改行したので、1行にしてください!
echo 'guest(01) %!s(int32=110) %!s(int32=3625)' | ruby -ne 'def get_value( str ) pos_1 = str.rindex "="; pos_2 = str.rindex ")"; str[ pos_1 + 1 ... pos_2 ] end;
ary = $_.split; puts "#{ ary[ 0 ] } CPU=#{ get_value( ary[ 1 ] ) } Memory=#{ get_value( ary[ 2 ] ) }"'
389デフォルトの名無しさん
2019/07/26(金) 12:22:34.47ID:AGnOcgvd >>388
死ね
死ね
390デフォルトの名無しさん
2019/07/27(土) 10:41:07.02ID:6v++aFZ1 上の方の数値判定だけどマイナス記号を考えない(つまり正整数だけを判定する)のなら
[ ! ${var%%[0-9]*} ]
これが最速で(記述も)最短じゃなかろうか。
[ ! ${var%%[0-9]*} ]
これが最速で(記述も)最短じゃなかろうか。
391デフォルトの名無しさん
2019/07/27(土) 11:54:57.07ID:z4Poa3yK 真っ直ぐに一直線ですか?
392デフォルトの名無しさん
2019/07/27(土) 13:52:23.75ID:QzyB/IP7 >>390
シェルのパターンマッチングでの '*' って any string の意味なので、
$ var='10abcdefg'
$ [ ! ${var%%[0-9]*} ] && echo integer
integer
となってしまう。bash の extglob を使うなら、
$ [ ! ${var%%?([-+])+([0-9])} ] && echo integer
などと書ける(空文字の場合に対応してないけど)。
シェルのパターンマッチングでの '*' って any string の意味なので、
$ var='10abcdefg'
$ [ ! ${var%%[0-9]*} ] && echo integer
integer
となってしまう。bash の extglob を使うなら、
$ [ ! ${var%%?([-+])+([0-9])} ] && echo integer
などと書ける(空文字の場合に対応してないけど)。
393デフォルトの名無しさん
2019/07/27(土) 15:15:37.83ID:6v++aFZ1394デフォルトの名無しさん
2019/07/27(土) 19:04:12.75ID:6v++aFZ1 突飛なことはせずcase分使うのが一番いいのかな。
正直、俺だったらそもそも「型」の概念が必要になるようなプログラムは
シェルスクリプトで書かないけど
正直、俺だったらそもそも「型」の概念が必要になるようなプログラムは
シェルスクリプトで書かないけど
395デフォルトの名無しさん
2019/07/28(日) 00:29:26.94ID:LPR+u+AV * は、シェルスクリプトでは、0文字以上の任意の文字列で、
正規表現では、直前の文字の0回以上の繰り返し
正規表現を使うのなら、egrep, grep -e でフィルターしないといけない
egrep '正規表現'
これもシェルで解釈されないように、シングルクォーテーションで囲む方がよい
正規表現では、直前の文字の0回以上の繰り返し
正規表現を使うのなら、egrep, grep -e でフィルターしないといけない
egrep '正規表現'
これもシェルで解釈されないように、シングルクォーテーションで囲む方がよい
396デフォルトの名無しさん
2019/07/28(日) 00:33:37.21ID:7n7RswoS perlは正規表現しか知らんが構文は結構読みにくいのね
pythonやruby辺りやった方がいいのかな
簡単なシェルスクリプトを書いたりsedやawkで弄ったりはしてるけど
pythonやruby辺りやった方がいいのかな
簡単なシェルスクリプトを書いたりsedやawkで弄ったりはしてるけど
397デフォルトの名無しさん
2019/07/28(日) 01:42:13.12ID:/N9EqgUo シェルスクリプトとしてはワンライナーが短く書け、
カオスも含めた無限のような表現力のあるperl を薦める
seq 30 | perl -0777 -ne 'print $_ =()= /1/g'
13
カオスも含めた無限のような表現力のあるperl を薦める
seq 30 | perl -0777 -ne 'print $_ =()= /1/g'
13
398デフォルトの名無しさん
2019/07/28(日) 02:18:58.47ID:UCGA8APU seq 30 | tr -dc '1' | wc -c
でいいんじゃね
でいいんじゃね
399デフォルトの名無しさん
2019/07/28(日) 02:37:29.23ID:/N9EqgUo 旨い
2文字以上じゃないことを利用する柔軟性見事
2文字以上じゃないことを利用する柔軟性見事
400デフォルトの名無しさん
2019/07/28(日) 03:11:34.56ID:vKAr7iFy401デフォルトの名無しさん
2019/07/28(日) 04:13:22.82ID:/N9EqgUo はい
402デフォルトの名無しさん
2019/07/28(日) 04:28:55.80ID:LPR+u+AV Ruby では、1 の個数を数える
seq 30 | ruby -e 'puts ARGF.read.count( "1" )'
#=> 13
seq 30 | ruby -e 'puts ARGF.read.count( "1" )'
#=> 13
403デフォルトの名無しさん
2019/07/28(日) 04:30:02.41ID:vKAr7iFy 何の意味があんの?
Perlだと複雑に書けるよってこと?
Perlだと複雑に書けるよってこと?
404デフォルトの名無しさん
2019/07/28(日) 04:37:14.85ID:UCGA8APU 1 を数えたいなら
$ seq 30 | grep -o 1 | wc -l
$ seq 30 | grep -o 1 | wc -l
405デフォルトの名無しさん
2019/07/28(日) 10:48:09.20ID:/N9EqgUo きっと見たこともない構文だと思って書いた
しかし、ここに多く書かれるより短いワンライナーより長いので
全然良くなかった
本当は「普通は思い浮かばない書き方の中に
短く書けるような可能性がある」と思わせたかったけど
力不足だった
しかし、ここに多く書かれるより短いワンライナーより長いので
全然良くなかった
本当は「普通は思い浮かばない書き方の中に
短く書けるような可能性がある」と思わせたかったけど
力不足だった
406デフォルトの名無しさん
2019/07/28(日) 11:51:54.16ID:V62sQMom 改行を無視して検索は?
407デフォルトの名無しさん
2019/07/28(日) 12:45:34.52ID:/N9EqgUo 3行以上にまたがる複数行?
2行まで?
2行まで?
408デフォルトの名無しさん
2019/07/29(月) 21:57:36.07ID:LpaqQy0x PowerShell では、
$matches = 1..30 | Select-String "1" -AllMatches
$matches.Matches.Count
#=> 13
$matches = 1..30 | Select-String "1" -AllMatches
$matches.Matches.Count
#=> 13
409デフォルトの名無しさん
2019/07/30(火) 00:35:05.01ID:TDafWW+v PowerShellって嫌われてるけど結構便利だよね。
でも使い熟せる自信も気力もないw
でも使い熟せる自信も気力もないw
410デフォルトの名無しさん
2019/07/30(火) 07:02:14.50ID:lWAzz/KK PowerShellってどういう場面で使われるの?
Bash使わないでPowerShell使うことってあんの?
Bash使わないでPowerShell使うことってあんの?
411デフォルトの名無しさん
2019/07/30(火) 07:18:22.77ID:RYwsY7rK windows update からの shutdown
でも十分便利そうだ
UIがことごとくGUIだから
砂漠の水のように利くんじゃないか?
でも十分便利そうだ
UIがことごとくGUIだから
砂漠の水のように利くんじゃないか?
412デフォルトの名無しさん
2019/07/30(火) 07:51:48.49ID:TDafWW+v 喩えが文学的すぎて分からん
413デフォルトの名無しさん
2019/07/30(火) 18:08:45.58ID:EUusSyFO414デフォルトの名無しさん
2019/07/30(火) 18:16:09.63ID:fdfPnQnm Remove-Item、Copy-Itemとか生理的に受け付けない体になってる。
415デフォルトの名無しさん
2019/07/30(火) 18:28:39.62ID:R+5nd6EU >>413
DOcker SHell
DOcker SHell
416デフォルトの名無しさん
2019/07/30(火) 18:34:09.08ID:EUusSyFO 時代からしてそれはないだろ
417デフォルトの名無しさん
2019/07/30(火) 19:37:33.76ID:6/Ph+fdB >>408
オシャレだ
オシャレだ
418デフォルトの名無しさん
2019/07/30(火) 20:50:28.04ID:TDafWW+v >>413
簡単にWebを検索してみてそれらしい記述を一件のみ見付けた。ほんとにこれがdoshの由来かは知らん。
OpenSolarisのBシェルから派生したSchily Bourne ShellというUnixシェル
http://schilytools.sourceforge.net/bosh.html
によると
* dosh builtin that allows to implement parametrized aliases.
らしい。
簡単にWebを検索してみてそれらしい記述を一件のみ見付けた。ほんとにこれがdoshの由来かは知らん。
OpenSolarisのBシェルから派生したSchily Bourne ShellというUnixシェル
http://schilytools.sourceforge.net/bosh.html
によると
* dosh builtin that allows to implement parametrized aliases.
らしい。
419418
2019/07/30(火) 20:57:36.54ID:TDafWW+v https://unix.stackexchange.com/a/223935
ここでも同じようなことを言っている。
dosh組込み命令を実装したうんぬん。
しかし肝心要のSolaris Bシェルの手引書
https://docs.oracle.com/cd/E56342_01/html/E54074/jsh-1.html
にはその記述が見当らず……。どゆこと???
ここでも同じようなことを言っている。
dosh組込み命令を実装したうんぬん。
しかし肝心要のSolaris Bシェルの手引書
https://docs.oracle.com/cd/E56342_01/html/E54074/jsh-1.html
にはその記述が見当らず……。どゆこと???
420デフォルトの名無しさん
2019/07/30(火) 21:12:05.50ID:EUusSyFO >>418
サンクス。boshなんてのがあるのか。
でもなんとなくboshが最初だとは思えないな
POSIXに影響を与えてるぐらいだからもっと大きな元ネタがありそうだけど
あとなんの略かもわからん。まさか do sh (shする?)
あと>>413のリンクが間違っていたので訂正
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_09_01_01
サンクス。boshなんてのがあるのか。
でもなんとなくboshが最初だとは思えないな
POSIXに影響を与えてるぐらいだからもっと大きな元ネタがありそうだけど
あとなんの略かもわからん。まさか do sh (shする?)
あと>>413のリンクが間違っていたので訂正
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_09_01_01
421デフォルトの名無しさん
2019/07/30(火) 21:15:06.53ID:EUusSyFO ここには元ネタはUNOSとか書いてあるね。
https://unix.stackexchange.com/questions/453827/making-alias-of-rm-command
This concept of parameterizable aliases has been invented by former AT&T
employees in 1980 and implemented in their real time UNIX clone called UNOS.
https://unix.stackexchange.com/questions/453827/making-alias-of-rm-command
This concept of parameterizable aliases has been invented by former AT&T
employees in 1980 and implemented in their real time UNIX clone called UNOS.
422デフォルトの名無しさん
2019/07/30(火) 21:19:41.35ID:EUusSyFO https://www.in-ulm.de/~mascheck/bourne/
> built-in "dosh" added, behaves similar to "sh -c 'command'" without launching a new shell, supports aliases
あぁ、なるほど。sh -c 'command'と同じように使えて
新しいシェルを起動しないから、do sh なのか
> built-in "dosh" added, behaves similar to "sh -c 'command'" without launching a new shell, supports aliases
あぁ、なるほど。sh -c 'command'と同じように使えて
新しいシェルを起動しないから、do sh なのか
423デフォルトの名無しさん
2019/07/30(火) 21:26:48.89ID:EUusSyFO https://unix.stackexchange.com/questions/145522/what-does-it-mean-to-be-sh-compatible
If you like to know more relations, e.g. with UNOS "command", "bsh" and the recent
Bourne Shell, send me a note. As a hint: UNOS command had a builtin command
"do" that acted as a one-line shell script with arguments. This idea was transferred into
the Bourne Shell as "dosh" and permits parameterizable aliases, something you cannot get from ksh or bash. ? schily
このschilyってのはSchily Bourne Shell(=bosh)の作者かな?
If you like to know more relations, e.g. with UNOS "command", "bsh" and the recent
Bourne Shell, send me a note. As a hint: UNOS command had a builtin command
"do" that acted as a one-line shell script with arguments. This idea was transferred into
the Bourne Shell as "dosh" and permits parameterizable aliases, something you cannot get from ksh or bash. ? schily
このschilyってのはSchily Bourne Shell(=bosh)の作者かな?
424デフォルトの名無しさん
2019/07/30(火) 21:30:36.00ID:TDafWW+v425デフォルトの名無しさん
2019/07/30(火) 21:57:06.40ID:EUusSyFO 「OpenSolarisのシェルに携わってる」はちょっと疑問かな
http://schilytools.sourceforge.net/bosh.html
> The Schily Bourne Shell was derived from the Bourne Shell sources from OpenSolaris.
と書いてあるように、OpenSolarisのシェルをベースに改良したSchily Bourne Shellの作者のようだ。
OpenSolarisシェルそのものには関わってない気がする
Schily Bourne Shellには、古いBourne Shellと互換性があるoboshと
POSIX厳格なpboshと、POSIX準拠+拡張のboshの三種類のシェルが含まれていて、
そのboshにはOpenSolaris Bourne Shell にはない機能
> The enhanced Schily Bourne Shell (bosh) implements the following features that are missing
> in the OpenSolaris Bourne Shell listed above:
として、自身が昔仕事で関わっていたUNOS
https://unix.stackexchange.com/users/120884/schily
> First paid UNIX related work with UNOS in 1982.
で実装されていたdosh(元はビルトインコマンドの"do"?)を移植したという流れっぽい。
だからSolaris Bシェルの手引書には無くて当然なのだろう。
Bourne Shellにも移植された
> This idea was transferred into the Bourne Shell as "dosh"
ようだから、どこかの実装にはdoshが存在するのかも
http://schilytools.sourceforge.net/bosh.html
> The Schily Bourne Shell was derived from the Bourne Shell sources from OpenSolaris.
と書いてあるように、OpenSolarisのシェルをベースに改良したSchily Bourne Shellの作者のようだ。
OpenSolarisシェルそのものには関わってない気がする
Schily Bourne Shellには、古いBourne Shellと互換性があるoboshと
POSIX厳格なpboshと、POSIX準拠+拡張のboshの三種類のシェルが含まれていて、
そのboshにはOpenSolaris Bourne Shell にはない機能
> The enhanced Schily Bourne Shell (bosh) implements the following features that are missing
> in the OpenSolaris Bourne Shell listed above:
として、自身が昔仕事で関わっていたUNOS
https://unix.stackexchange.com/users/120884/schily
> First paid UNIX related work with UNOS in 1982.
で実装されていたdosh(元はビルトインコマンドの"do"?)を移植したという流れっぽい。
だからSolaris Bシェルの手引書には無くて当然なのだろう。
Bourne Shellにも移植された
> This idea was transferred into the Bourne Shell as "dosh"
ようだから、どこかの実装にはdoshが存在するのかも
426デフォルトの名無しさん
2019/07/30(火) 22:00:29.38ID:TDafWW+v427デフォルトの名無しさん
2019/07/30(火) 22:35:47.42ID:TDafWW+v 全然関係ないけど
$'\n'←こういうのって2020年あたりに発行されるPOSIXに組込まれるかもしれないらしいね。
そのページの下の方に書いてあった。
互換性とか大丈夫なのかな……?
$'\n'←こういうのって2020年あたりに発行されるPOSIXに組込まれるかもしれないらしいね。
そのページの下の方に書いてあった。
互換性とか大丈夫なのかな……?
428デフォルトの名無しさん
2019/07/30(火) 22:45:31.33ID:TDafWW+v 参考: http://austingroupbugs.net/view.php?id=249
ていうかAustin GroupってThe Open Groupとは別ドメインなんだな。
サブグループだと思ってたわ。
ていうかAustin GroupってThe Open Groupとは別ドメインなんだな。
サブグループだと思ってたわ。
429デフォルトの名無しさん
2019/07/31(水) 12:01:53.51ID:6BPSvdm1 >>414
get-alias (gal)で、alias を表示できる。
多くのLinux コマンドのalias も、指定されている
gal | where-object {$_.Definition -match "remove-item"}
# Remove-Item のalias は、del, erase, rd, ri, rm, rmdir
gal | where-object {$_.Definition -match "copy-item"}
# Copy-Item のalias は、copy, cp, cpi
gal -name ls
# ls -> Get-ChildItem
gal -name echo
# echo -> Write-Output
get-alias (gal)で、alias を表示できる。
多くのLinux コマンドのalias も、指定されている
gal | where-object {$_.Definition -match "remove-item"}
# Remove-Item のalias は、del, erase, rd, ri, rm, rmdir
gal | where-object {$_.Definition -match "copy-item"}
# Copy-Item のalias は、copy, cp, cpi
gal -name ls
# ls -> Get-ChildItem
gal -name echo
# echo -> Write-Output
430デフォルトの名無しさん
2019/07/31(水) 16:37:25.52ID:kGX3Rh8Y431デフォルトの名無しさん
2019/07/31(水) 22:49:22.63ID:FZL3ewwl >>412
お釈迦様のアドバイス「犀の角のように独り歩め」も意味わからん…
お釈迦様のアドバイス「犀の角のように独り歩め」も意味わからん…
432デフォルトの名無しさん
2019/07/31(水) 23:18:58.96ID:kGX3Rh8Y boshがビルドできずに諦めたw
433デフォルトの名無しさん
2019/07/31(水) 23:25:31.28ID:8xUIRaAC434デフォルトの名無しさん
2019/07/31(水) 23:39:26.64ID:8xUIRaAC おや?最新版、2019-07-22版でビルド失敗した。
なんとなしにNetBSDでパッケージがあるのを見つけて使った2019-03-11版が運が良かったか
https://cdn.netbsd.org/pub/pkgsrc/current/pkgsrc/shells/bosh/README.html
なんとなしにNetBSDでパッケージがあるのを見つけて使った2019-03-11版が運が良かったか
https://cdn.netbsd.org/pub/pkgsrc/current/pkgsrc/shells/bosh/README.html
435デフォルトの名無しさん
2019/07/31(水) 23:57:18.53ID:8xUIRaAC 2019-06-13までは普通にビルドできるね
2019-07-15からビルドに失敗するようになってる
2019-07-15からビルドに失敗するようになってる
436デフォルトの名無しさん
2019/08/01(木) 02:58:17.41ID:PmXIwIbo >>435
情報ありがとう。古いので試してみるわ。
情報ありがとう。古いので試してみるわ。
437デフォルトの名無しさん
2019/08/01(木) 11:35:33.85ID:czAE5CE0 関数の中は、set -eで止めたいけど、関数の外では(後処理をするために)止めたくないって場合が辛いわ
例えばこんなコードがあって、falseで止まるようにしたいからset -eにするだろ?
foo() {
set -e
echo 1
false
echo 2
}
でも呼び出し側では必ず後処理をしたいから止めたくない。
set +e
foo
echo "後処理"
これだと止まってしまうから、foo &&: とかすると
今度は、fooの中でset -eの効果が無くなってしまう。何だこの仕様?
( foo ) とすると期待通りにfalseで止まるかつ後処理を実行できたが、
fooがサブシェルなので、fooの中で定義した変数にアクセスできない
困った
例えばこんなコードがあって、falseで止まるようにしたいからset -eにするだろ?
foo() {
set -e
echo 1
false
echo 2
}
でも呼び出し側では必ず後処理をしたいから止めたくない。
set +e
foo
echo "後処理"
これだと止まってしまうから、foo &&: とかすると
今度は、fooの中でset -eの効果が無くなってしまう。何だこの仕様?
( foo ) とすると期待通りにfalseで止まるかつ後処理を実行できたが、
fooがサブシェルなので、fooの中で定義した変数にアクセスできない
困った
438デフォルトの名無しさん
2019/08/01(木) 12:20:40.41ID:aVYnxNEs >>431
それは犀の角が一本だからという、特にひねりのない喩え。
それは犀の角が一本だからという、特にひねりのない喩え。
439デフォルトの名無しさん
2019/08/01(木) 12:25:28.77ID:iHxbPEOX set -eはshellをexitするから当然の動作じゃない?
foo && : だと最終的なfooの戻り値を判定する必要があるからfalseで止まらずに最後まで行くんじゃないか
関数の中だけなら横着せずに
false || return
しろってことじゃないかな
foo && : だと最終的なfooの戻り値を判定する必要があるからfalseで止まらずに最後まで行くんじゃないか
関数の中だけなら横着せずに
false || return
しろってことじゃないかな
440デフォルトの名無しさん
2019/08/01(木) 13:07:42.24ID:lJwvTmEp 後処理だけなら、trap '後処理' ERR でやれば
根本的に -e の使い方が違うと思うけど
根本的に -e の使い方が違うと思うけど
441デフォルトの名無しさん
2019/08/01(木) 13:10:18.98ID:bR99qXsR $ dash
$ trap : ERR
trap: ERR: bad trap
$ trap : ERR
trap: ERR: bad trap
442デフォルトの名無しさん
2019/08/01(木) 13:15:37.05ID:lJwvTmEp EXIT でもいいぞ
443デフォルトの名無しさん
2019/08/01(木) 13:17:58.23ID:bR99qXsR どうやってEXITから終了せずに通常の流れに戻すの?
444デフォルトの名無しさん
2019/08/01(木) 13:19:11.98ID:lJwvTmEp なんやお前は
「後処理だけなら」って言ってるだろ
「後処理だけなら」って言ってるだろ
445デフォルトの名無しさん
2019/08/01(木) 15:30:04.66ID:WaJjQk0q SIGHUT とかのシグナル部分を書くとか?
446デフォルトの名無しさん
2019/08/01(木) 20:47:35.88ID:SQRHjrcQ func() {
return 123
}
if ! func; then
echo $?
fi
0って表示されるんだけど、どういうこと!?
return 123
}
if ! func; then
echo $?
fi
0って表示されるんだけど、どういうこと!?
447デフォルトの名無しさん
2019/08/01(木) 21:31:03.39ID:2c4IvXw2 >>446
戻り値123を!しているから0になっただけでは
戻り値123を!しているから0になっただけでは
448デフォルトの名無しさん
2019/08/01(木) 21:33:30.40ID:SQRHjrcQ こう書けってことか?
面倒くさいな
if func; then
:
else
echo $?
fi
面倒くさいな
if func; then
:
else
echo $?
fi
449デフォルトの名無しさん
2019/08/01(木) 22:05:20.92ID:Ye1sT2dv func || echo $? でいいんじゃね
450デフォルトの名無しさん
2019/08/01(木) 22:10:56.38ID:SQRHjrcQ 実際にはecho $?以外にもすることがあるから
451デフォルトの名無しさん
2019/08/01(木) 22:27:36.45ID:Ye1sT2dv んじゃ、
func || { echo $?; ... ; }
とか。
func || { echo $?; ... ; }
とか。
452デフォルトの名無しさん
2019/08/02(金) 02:34:53.77ID:hQ+yEyXN Cじゃないから終了コードをそんな風に使わないほうが良い気がする…
あくまで「気がする」だけだけど
あくまで「気がする」だけだけど
453デフォルトの名無しさん
2019/08/02(金) 02:59:49.78ID:O3iYpUQI 値が 0 とそれ以外だけではなく、
それ以外にも、ある程度数値に意味があるのもあるからいいんじゃないのと思うけど
それ以外にも、ある程度数値に意味があるのもあるからいいんじゃないのと思うけど
454デフォルトの名無しさん
2019/08/02(金) 03:02:36.73ID:O3iYpUQI ああ、そんな風 = 返り値が勝手に暗黙的に変わる変わらないってことかな?
だったらほぼ同意
だったらほぼ同意
455デフォルトの名無しさん
2019/08/02(金) 03:40:21.45ID:hQ+yEyXN456デフォルトの名無しさん
2019/08/02(金) 03:54:22.19ID:O3iYpUQI まあ元レスの人がどういう使い方をしたいのかわからんけど、そういう感じ
457デフォルトの名無しさん
2019/08/02(金) 07:48:45.01ID:hQ+yEyXN bcコマンドで階乗計算をしたくてコードを書いてるんだけど↓
n = 2
define f(n) {
f = 1
if (n == 0) { return(f) } /* 0! := 1 */
f = n * f(n - 1)
return(f)
}
"0! = "; f(0)
"1! = "; f(1)
"2! = "; f(2)
"5! = "; f(5)
多分これでいい筈なんだけどreturn式を二度使ってるのがダサく感じる…
もうちょっと賢い方法知らない?
n = 2
define f(n) {
f = 1
if (n == 0) { return(f) } /* 0! := 1 */
f = n * f(n - 1)
return(f)
}
"0! = "; f(0)
"1! = "; f(1)
"2! = "; f(2)
"5! = "; f(5)
多分これでいい筈なんだけどreturn式を二度使ってるのがダサく感じる…
もうちょっと賢い方法知らない?
458デフォルトの名無しさん
2019/08/02(金) 07:49:38.54ID:hQ+yEyXN ごめん一行目のn=2は無視って。
459デフォルトの名無しさん
2019/08/02(金) 08:02:59.58ID:XJV5qmce define f(n) {
if (n == 0) {
f = 1
} else {
f = n * f(n - 1)
}
return(f)
}
とか( n < 0 の場合、無限ループになるけど)
if (n == 0) {
f = 1
} else {
f = n * f(n - 1)
}
return(f)
}
とか( n < 0 の場合、無限ループになるけど)
460デフォルトの名無しさん
2019/08/02(金) 08:15:06.73ID:hQ+yEyXN >>459
ありがとう。
でもelseって使えなくない? GNU bcだと使えるのかな?
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/bc.html
ありがとう。
でもelseって使えなくない? GNU bcだと使えるのかな?
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/bc.html
461デフォルトの名無しさん
2019/08/02(金) 08:42:59.37ID:dUmy9lW0 elseはGNU拡張
else使えないならこうするしかない
define f(n) {
if (n == 0) { f = 1 }
if (n != 0) { f = n * f(n - 1) }
return(f)
}
else使えないならこうするしかない
define f(n) {
if (n == 0) { f = 1 }
if (n != 0) { f = n * f(n - 1) }
return(f)
}
462デフォルトの名無しさん
2019/08/02(金) 09:23:07.90ID:7tJhBDcy463デフォルトの名無しさん
2019/08/02(金) 11:27:07.42ID:hQ+yEyXN 世の中には例え話を持ち出さないと気が済まない人が一定数存在する。
464デフォルトの名無しさん
2019/08/02(金) 12:50:24.63ID:vUPSv33I >>462
知らんけど昔の人が思い付いていいと思ったから書いたんだろう。
知らんけど昔の人が思い付いていいと思ったから書いたんだろう。
465デフォルトの名無しさん
2019/08/02(金) 12:51:11.15ID:hQ+yEyXN >>190 WindowsにJavaが入るかもって話あったの?そもそもそんな話すらなくね?
466デフォルトの名無しさん
2019/08/02(金) 13:50:46.03ID:pa9nweBb >>465
昔あったっしょ
Microsoft J++だったっけ?
JDirectとか言うCOMかActiveXコントロールかを直接呼び出せる機能拡張付きで、
それにSunがケチを付けて(確か)裁判沙汰になって、結局廃止になったやつ
TCKにも通らないだろうからJavaは名乗れないはずだけど
昔あったっしょ
Microsoft J++だったっけ?
JDirectとか言うCOMかActiveXコントロールかを直接呼び出せる機能拡張付きで、
それにSunがケチを付けて(確か)裁判沙汰になって、結局廃止になったやつ
TCKにも通らないだろうからJavaは名乗れないはずだけど
467デフォルトの名無しさん
2019/08/02(金) 13:54:51.56ID:xsQQm7uF >>465
90年代後半にだな・・・
90年代後半にだな・・・
468デフォルトの名無しさん
2019/08/02(金) 13:57:46.29ID:XJV5qmce 「マイクロソフトが Java に塩を混ぜた!」ってやつか
469デフォルトの名無しさん
2019/08/02(金) 20:32:46.34ID:hQ+yEyXN sedかなにかで↓
<td>
AAAA
</td>
<td>
BBBB
</td>
↑っていうデータのBBBを取り出したい。
残念なことにtdにIDやらなにやらが賦与されてないから手段としては
「1番目に表われた/<td>/<\/td>/は無視って2番目の/<td>/<\/td>/の中身を表示する」
っていうのになると思う。しかし方法が思い付かない……。
できればsed, awkあたりで処理できればいいなと思ってるんだけど,どなたか力を貸してほしい。
上のデータだけど,「実際はもっと複雑でtableが入れ子になってる」とかそういうことはないです。
<td>
AAAA
</td>
<td>
BBBB
</td>
↑っていうデータのBBBを取り出したい。
残念なことにtdにIDやらなにやらが賦与されてないから手段としては
「1番目に表われた/<td>/<\/td>/は無視って2番目の/<td>/<\/td>/の中身を表示する」
っていうのになると思う。しかし方法が思い付かない……。
できればsed, awkあたりで処理できればいいなと思ってるんだけど,どなたか力を貸してほしい。
上のデータだけど,「実際はもっと複雑でtableが入れ子になってる」とかそういうことはないです。
470デフォルトの名無しさん
2019/08/02(金) 20:38:11.21ID:cEuue6ob なら5行目を取り出せばいいじゃん
471デフォルトの名無しさん
2019/08/02(金) 20:40:10.25ID:2UnKye9C /^<td>$/{n;/BBB/p}
472デフォルトの名無しさん
2019/08/02(金) 20:44:47.38ID:O3iYpUQI 今までのレスからはそんな質問するはずがないとしか思えないんだけどw
<td>AAA
</td>
<td>
BBB</td>
なんぞリターンがあってもなくてもいいというhtml/xmlらしく、行がちゃんとしているわけではないとか?
<td>AAA
</td>
<td>
BBB</td>
なんぞリターンがあってもなくてもいいというhtml/xmlらしく、行がちゃんとしているわけではないとか?
473デフォルトの名無しさん
2019/08/02(金) 21:06:45.26ID:dUmy9lW0474デフォルトの名無しさん
2019/08/02(金) 21:06:52.97ID:XJV5qmce GNU sed の -z オプションを使って
$ sed -rz 's:.*</td>\n?<td>\n?(.*)</td>.*:\1:' data.html
$ sed -rz 's:.*</td>\n?<td>\n?(.*)</td>.*:\1:' data.html
475デフォルトの名無しさん
2019/08/02(金) 21:07:39.38ID:hQ+yEyXN476デフォルトの名無しさん
2019/08/02(金) 21:30:15.54ID:XJV5qmce GNU grep ならこんな感じ
$ grep -Pzo '<td>\n?\K(.|\n)*?(?=\n?</td>)' x.xml | tr '\0' '\n' | sed -n 2p
$ grep -Pzo '<td>\n?\K(.|\n)*?(?=\n?</td>)' x.xml | tr '\0' '\n' | sed -n 2p
477デフォルトの名無しさん
2019/08/02(金) 21:35:20.07ID:hQ+yEyXN478デフォルトの名無しさん
2019/08/02(金) 21:38:37.66ID:cEuue6ob 正直、CLIツール使って一発でやってしまおう!
なんて考えるから難しくなるんだよ。
一行一データになってないものは、
シェルスクリプトでやったほうが楽
#!/bin/sh
a=$(cat html.txt)
a=${a#*<td>}
a=${a#*<td>}
a=${a%%</td>*}
echo "$a"
なんて考えるから難しくなるんだよ。
一行一データになってないものは、
シェルスクリプトでやったほうが楽
#!/bin/sh
a=$(cat html.txt)
a=${a#*<td>}
a=${a#*<td>}
a=${a%%</td>*}
echo "$a"
479デフォルトの名無しさん
2019/08/02(金) 21:38:54.44ID:+p+nzQa3 >>475
>を>\nにして\n\nを\nにすればいいだけじゃないの?
>を>\nにして\n\nを\nにすればいいだけじゃないの?
480デフォルトの名無しさん
2019/08/02(金) 21:59:02.93ID:T1FFAKuC xmllint使えは禁句なの?
481デフォルトの名無しさん
2019/08/02(金) 22:00:05.58ID:G/LyK8vk Ruby なら、すべての改行を削除してから、最短マッチ
str = <<"EOT"
<td>
AAAA
</td>
<td>
BBBB
</td>
EOT
str.delete!( "\n" ) # すべての改行を削除する
re = /<td>(.*?)<\/td>/ # ? は最短マッチ
p results = str.scan( re ).flatten
# ["AAAA", "BBBB"]
p results[ 1 ]
# "BBBB"
str = <<"EOT"
<td>
AAAA
</td>
<td>
BBBB
</td>
EOT
str.delete!( "\n" ) # すべての改行を削除する
re = /<td>(.*?)<\/td>/ # ? は最短マッチ
p results = str.scan( re ).flatten
# ["AAAA", "BBBB"]
p results[ 1 ]
# "BBBB"
482デフォルトの名無しさん
2019/08/02(金) 22:47:11.19ID:hQ+yEyXN >>480
残念ながらそのHTMLは整形形式じゃないのでマトモに解析できないんです。
残念ながらそのHTMLは整形形式じゃないのでマトモに解析できないんです。
483481
2019/08/02(金) 23:15:30.78ID:G/LyK8vk Ruby で、nokogiri パーサーなら、
require 'nokogiri'
doc = Nokogiri::HTML( <<EOT.delete( "\n" ) ) # すべての改行を削除する
<td>
AAAA
</td>
<td>
BBBB
</td>
EOT
elements = doc.css( "td" )
p elements.first.content #=> "AAAA"
p elements[ 1 ].content #=> "BBBB"
require 'nokogiri'
doc = Nokogiri::HTML( <<EOT.delete( "\n" ) ) # すべての改行を削除する
<td>
AAAA
</td>
<td>
BBBB
</td>
EOT
elements = doc.css( "td" )
p elements.first.content #=> "AAAA"
p elements[ 1 ].content #=> "BBBB"
484デフォルトの名無しさん
2019/08/02(金) 23:29:54.36ID:pa9nweBb >>476
\Kじゃなくて(?<=..._)で書いたほうが読みやすくね?とか思ったけど
PerlやPCREじゃlookbehindに可変長になるパターンは指定できないのか
JavaScriptだと通るんだよね....
\Kじゃなくて(?<=..._)で書いたほうが読みやすくね?とか思ったけど
PerlやPCREじゃlookbehindに可変長になるパターンは指定できないのか
JavaScriptだと通るんだよね....
485デフォルトの名無しさん
2019/08/02(金) 23:34:34.72ID:cEuue6ob Ruby遅すぎるんだよ
$ time ruby html.rb
"AAAA"
"BBBB"
real 0m0.079s
user 0m0.079s
sys 0m0.000s
$ time sh html.sh
BBBB
real 0m0.002s
user 0m0.002s
sys 0m0.000s
$ time ruby html.rb
"AAAA"
"BBBB"
real 0m0.079s
user 0m0.079s
sys 0m0.000s
$ time sh html.sh
BBBB
real 0m0.002s
user 0m0.002s
sys 0m0.000s
486デフォルトの名無しさん
2019/08/02(金) 23:36:49.26ID:cEuue6ob これも遅いな。やっぱりシェルスクリプトが一番か
$ time grep -Pzo '<td>\n?\K(.|\n)*?(?=\n?</td>)' x.xml | tr '\0' '\n' | sed -n 2p
BBBB
real 0m0.003s
user 0m0.004s
sys 0m0.003s
$ time grep -Pzo '<td>\n?\K(.|\n)*?(?=\n?</td>)' x.xml | tr '\0' '\n' | sed -n 2p
BBBB
real 0m0.003s
user 0m0.004s
sys 0m0.003s
487デフォルトの名無しさん
2019/08/02(金) 23:38:32.60ID:cEuue6ob こうしたらさらに速くなったわw
シェルスクリプト最強伝説
#!/bin/sh
a="
<td>
AAAA
</td>
<td>
BBBB
</td>
"
a=${a#*<td>}
a=${a#*<td>}
a=${a%%</td>*}
echo "$a"
$ time sh html.sh
BBBB
real 0m0.001s
user 0m0.001s
sys 0m0.000s
シェルスクリプト最強伝説
#!/bin/sh
a="
<td>
AAAA
</td>
<td>
BBBB
</td>
"
a=${a#*<td>}
a=${a#*<td>}
a=${a%%</td>*}
echo "$a"
$ time sh html.sh
BBBB
real 0m0.001s
user 0m0.001s
sys 0m0.000s
488デフォルトの名無しさん
2019/08/02(金) 23:46:41.69ID:dUmy9lW0 >>487
スクレイピングする時にそんなコード毎回書くわけ?
スクレイピングする時にそんなコード毎回書くわけ?
489デフォルトの名無しさん
2019/08/02(金) 23:58:58.92ID:2UnKye9C a#*
a%% あたりがシェルスクリプト独自の難読パーツだが
覚えたら高速なのか...
a%% あたりがシェルスクリプト独自の難読パーツだが
覚えたら高速なのか...
490デフォルトの名無しさん
2019/08/03(土) 00:25:50.69ID:i7fqO3Sj491デフォルトの名無しさん
2019/08/03(土) 00:33:21.53ID:dYT3TwZL 自分は
キーボードの左側: # -> prefix
キーボードの右側: % -> suffix
で、削るんだっったっけ?残すんだったっけ?
結局毎回調べるという体たらく
キーボードの左側: # -> prefix
キーボードの右側: % -> suffix
で、削るんだっったっけ?残すんだったっけ?
結局毎回調べるという体たらく
492デフォルトの名無しさん
2019/08/03(土) 00:40:18.71ID:9AEx1UEu >>490
thanks
thanks
493デフォルトの名無しさん
2019/08/03(土) 00:57:31.70ID:37D8ZUar >>482
ブラウザでF12キーでコンソール開いて、
var q = (xml, query) => new DOMParser().parseFromString(`<xml>${xml}</xml>`, 'application/xml').querySelector(query).innerHTML.trim();
var text = q(`
<td>
AAAA
</td>
<td>
BBBB
</td>
`, 'td:nth-of-type(2)');
console.log(text); //=> BBBB
xmlとしてのパースだから、
q(`<chinko>AAAA</chinko><chinko>BBBB</chinko>`, 'chinko:nth-of-type(2)');
とかでも大丈夫。
一方htmlとしてもパースできるけど少なくともtableタグは補わなきゃならんね↓
var q = (html, query) => new DOMParser().parseFromString(html, 'text/html').querySelector(query).innerHTML.trim();
var text = q(`
<table>
<td>
AAAA
</td>
<td>
BBBB
</td>
</table>
`, 'td:nth-of-type(2)');
console.log(text); //=> BBBB
ブラウザでF12キーでコンソール開いて、
var q = (xml, query) => new DOMParser().parseFromString(`<xml>${xml}</xml>`, 'application/xml').querySelector(query).innerHTML.trim();
var text = q(`
<td>
AAAA
</td>
<td>
BBBB
</td>
`, 'td:nth-of-type(2)');
console.log(text); //=> BBBB
xmlとしてのパースだから、
q(`<chinko>AAAA</chinko><chinko>BBBB</chinko>`, 'chinko:nth-of-type(2)');
とかでも大丈夫。
一方htmlとしてもパースできるけど少なくともtableタグは補わなきゃならんね↓
var q = (html, query) => new DOMParser().parseFromString(html, 'text/html').querySelector(query).innerHTML.trim();
var text = q(`
<table>
<td>
AAAA
</td>
<td>
BBBB
</td>
</table>
`, 'td:nth-of-type(2)');
console.log(text); //=> BBBB
494デフォルトの名無しさん
2019/08/03(土) 03:42:42.10ID:eOXqQaf9495デフォルトの名無しさん
2019/08/03(土) 04:43:13.91ID:i7fqO3Sj >>494
俺含め日本人には#42みたいなのは馴染み薄いよね…
まあ「全く知らない概念」ではなかったから
とりあえず#は前,%は後,というように覚えられたけど。
コメントっていうのはいい案だと思う。
シェルスクリプトを書いている全員が把握できる概念だから。
俺含め日本人には#42みたいなのは馴染み薄いよね…
まあ「全く知らない概念」ではなかったから
とりあえず#は前,%は後,というように覚えられたけど。
コメントっていうのはいい案だと思う。
シェルスクリプトを書いている全員が把握できる概念だから。
496デフォルトの名無しさん
2019/08/03(土) 05:33:16.75ID:20yQPXqo ナンバナィン?
#はスーパーユーザで%はcshだな
#はスーパーユーザで%はcshだな
497デフォルトの名無しさん
2019/08/03(土) 06:07:39.94ID:l2kKbyZy シェルスクリプトの#と%はなんとなく使えてるが正規表現の前後読みは未だに無理ポ
498デフォルトの名無しさん
2019/08/03(土) 06:23:53.55ID:i7fqO3Sj 正規表現の割と新しめの拡張は
既存のメタ文字と被らないようになってるから類推しにくい記号になってしまってる場合が多い。
…まあ出典とかなくて俺の予想だけどw
最近だと「名前空間」的な概念が登場して\p{Kata}みたいな書き方が増えてきて助かる。
覚えるの簡単!
既存のメタ文字と被らないようになってるから類推しにくい記号になってしまってる場合が多い。
…まあ出典とかなくて俺の予想だけどw
最近だと「名前空間」的な概念が登場して\p{Kata}みたいな書き方が増えてきて助かる。
覚えるの簡単!
499デフォルトの名無しさん
2019/08/03(土) 08:10:24.89ID:GWDLl7Iz なんのこっちゃと思ったら.NETか
[:Katakana:]でいいんじゃないか。すでにあるからわかりやすいし
思惑でそうしてないんだろうけど
[:Katakana:]でいいんじゃないか。すでにあるからわかりやすいし
思惑でそうしてないんだろうけど
500デフォルトの名無しさん
2019/08/03(土) 09:10:18.89ID:i7fqO3Sj501デフォルトの名無しさん
2019/08/03(土) 09:11:02.22ID:i7fqO3Sj 逆に.NETでUnicodeロケールの正規表現が使えるとは思いもよらなんだ
502デフォルトの名無しさん
2019/08/03(土) 09:42:41.49ID:9AEx1UEu ...| perl -pe 's{" [^"]+ "}{ $& =~ s/ /-/gr }xeg'|...
awk でもできるかもしれないけどこの正規表現が便利
"text with blank space" の中だけ空白を-で詰め物するのに使っている
空白があると正常に動作しないコードの前パイプに挟む
awk でもできるかもしれないけどこの正規表現が便利
"text with blank space" の中だけ空白を-で詰め物するのに使っている
空白があると正常に動作しないコードの前パイプに挟む
503デフォルトの名無しさん
2019/08/03(土) 10:30:59.00ID:i7fqO3Sj >>502
なんかコマンドの引数の仕様とかを利用して
POSIXの範囲で実装できそう。
もちろんperlで十分だけど。
abc def "text with blacket" dee
に対して
abc def "text-with-blacket" dee
ってい出力を返す訳だから
for str in abc def "text-with-blacket" dee; do
printf '%s\n' "$str" | tr ' ' '-'
done | tr '\n' ' '
とか?
あ,駄目だこれだと"が戻ってこねーw
なんかコマンドの引数の仕様とかを利用して
POSIXの範囲で実装できそう。
もちろんperlで十分だけど。
abc def "text with blacket" dee
に対して
abc def "text-with-blacket" dee
ってい出力を返す訳だから
for str in abc def "text-with-blacket" dee; do
printf '%s\n' "$str" | tr ' ' '-'
done | tr '\n' ' '
とか?
あ,駄目だこれだと"が戻ってこねーw
504デフォルトの名無しさん
2019/08/03(土) 11:33:18.72ID:63RDVzrz 無理やり
echo 'abc def "text with blcket" dee' |
sed -E 's:^(.*)"([^"]*)"(.*)$:printf "%s\\"%s\\"%s\n" "\1" $(echo "\2"|tr " " "-") "\3":e'
echo 'abc def "text with blcket" dee' |
sed -E 's:^(.*)"([^"]*)"(.*)$:printf "%s\\"%s\\"%s\n" "\1" $(echo "\2"|tr " " "-") "\3":e'
505デフォルトの名無しさん
2019/08/03(土) 11:35:32.45ID:l2kKbyZy $ echo やまだヤマダ山田 | grep -oP "\p{Katakana}"
ヤ
マ
ダ
-o使うと改行されるのね
ヤ
マ
ダ
-o使うと改行されるのね
506デフォルトの名無しさん
2019/08/03(土) 12:22:48.42ID:63RDVzrz スペース区切りでよければ
$ echo やまだヤマダ山田 | grep -oP "\p{Katakana}" | xargs
ヤ マ ダ
$ echo やまだヤマダ山田 | grep -oP "\p{Katakana}" | xargs
ヤ マ ダ
507デフォルトの名無しさん
2019/08/03(土) 13:09:38.57ID:H1MpioV8508デフォルトの名無しさん
2019/08/03(土) 13:55:12.22ID:dYT3TwZL 40秒で支度しな
509デフォルトの名無しさん
2019/08/04(日) 17:11:27.60ID:d0z5l48N 俺だったらperl使って全部読んで長い一行として扱って抜き出すか、または XML::Simple モジュール使って変数に展開してから取り出すかするかな。
つまり、シェルスクリプトは使わない。やってやれないことはないと思うが複雑怪奇なものになりそうなので。
つまり、シェルスクリプトは使わない。やってやれないことはないと思うが複雑怪奇なものになりそうなので。
510デフォルトの名無しさん
2019/08/04(日) 17:12:43.83ID:d0z5l48N あ、リロード忘れて書いたら山盛りで他の書き込みが・・・
俺の書いたことは忘れてくれ。
俺の書いたことは忘れてくれ。
511デフォルトの名無しさん
2019/08/04(日) 17:13:02.34ID:arZQ1GVT 【小沢が育てた刺客】 山本太郎「政権を仕留める」
http://lavender.5ch.net/test/read.cgi/giin/1564896780/l50
http://lavender.5ch.net/test/read.cgi/giin/1564896780/l50
512デフォルトの名無しさん
2019/08/04(日) 18:10:11.11ID:d0z5l48N 丸くても刺客
513デフォルトの名無しさん
2019/08/04(日) 18:11:50.20ID:M00OQnGm 40秒で刺客しな
514デフォルトの名無しさん
2019/08/04(日) 18:22:43.73ID:OC9PgLo7 PythonのBeautifulSoupだと、パーサーにCで書かれたlxmlを選べるようになってるんだが、
そういうの使えば、シェルの方が断然速いとはならないんじゃないかな?
PerlとかRubyにも似たようなのはあるでしょ。
そういうの使えば、シェルの方が断然速いとはならないんじゃないかな?
PerlとかRubyにも似たようなのはあるでしょ。
515デフォルトの名無しさん
2019/08/04(日) 18:40:40.05ID:zjBZp1dd ディレクトリに、test01 〜 test99 ファイルがある時に、
test100, test101 と、ファイルを増やしていくと、
表示順が、test20, test21 などよりも、
test100, test101 の方が、先に来るようになった
これらを数字順で表示するには、どういうフィルターを作れば良いでしょう?
まあ、すべてのファイル名を、test001 など、3桁表示に変えれば、解決するけど
test100, test101 と、ファイルを増やしていくと、
表示順が、test20, test21 などよりも、
test100, test101 の方が、先に来るようになった
これらを数字順で表示するには、どういうフィルターを作れば良いでしょう?
まあ、すべてのファイル名を、test001 など、3桁表示に変えれば、解決するけど
516デフォルトの名無しさん
2019/08/04(日) 19:18:29.22ID:ApCAdEzq >>515
プレフィクスが一緒なら
そのプレフィクスと0パディングを切り取ってsortに掛ければいいんじゃないかな。
で並び換えたものにプレフィクスと%0dを追加する。
ファイル名じゃなくてすまんが↓こんな感じ?
$ <<. sed 's/test0*//1' | sort -n | while read line; do printf 'test%02d\n' $line; done
test99
test100
test21
test01
test20
test101
.
プレフィクスが一緒なら
そのプレフィクスと0パディングを切り取ってsortに掛ければいいんじゃないかな。
で並び換えたものにプレフィクスと%0dを追加する。
ファイル名じゃなくてすまんが↓こんな感じ?
$ <<. sed 's/test0*//1' | sort -n | while read line; do printf 'test%02d\n' $line; done
test99
test100
test21
test01
test20
test101
.
517516
2019/08/04(日) 19:38:16.75ID:ApCAdEzq 改良。あとsort -nって0埋め関係ないんだな。
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/sort.html#tag_20_119_04
ls -1 test* | sed 's/^test//' | sort -n | xargs -I @ printf 'test%02d\n' @
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/sort.html#tag_20_119_04
ls -1 test* | sed 's/^test//' | sort -n | xargs -I @ printf 'test%02d\n' @
518デフォルトの名無しさん
2019/08/04(日) 19:45:40.73ID:ZVJM9ExE519デフォルトの名無しさん
2019/08/04(日) 20:01:45.96ID:hlZDnb3L >>515
ls -v
ls -v
520デフォルトの名無しさん
2019/08/04(日) 20:02:42.33ID:/i7K4ZYC >>515
GNU coreutils の ls コマンドなら -v オプションで version sort してくれる
$ ls -v test*
$ man ls
-v natural sort of (version) numbers within text
GNU coreutils の ls コマンドなら -v オプションで version sort してくれる
$ ls -v test*
$ man ls
-v natural sort of (version) numbers within text
521デフォルトの名無しさん
2019/08/04(日) 20:05:19.04ID:KSih4AJE となるとMacは切り捨てだな
522デフォルトの名無しさん
2019/08/04(日) 20:06:51.77ID:ZVJM9ExE おお、lsにも-vオプションあったっけ
524デフォルトの名無しさん
2019/08/04(日) 21:11:25.12ID:WhAPGaK9 sort --help には
-V, --version-sort 自然な (バージョン) 数字順でソートする
って書いてあるけどさ、これセマンティクスバージョニングでの
比較にちゃんとなってるの?正確な仕様がわからん
-V, --version-sort 自然な (バージョン) 数字順でソートする
って書いてあるけどさ、これセマンティクスバージョニングでの
比較にちゃんとなってるの?正確な仕様がわからん
525デフォルトの名無しさん
2019/08/04(日) 21:14:26.03ID:ApCAdEzq なんにせよ可搬性ないからあまり使わんほうがいい
526デフォルトの名無しさん
2019/08/04(日) 23:41:22.05ID:fspxWXLG シェルスクリプトに可搬性期待するなって結論出たろ
527デフォルトの名無しさん
2019/08/05(月) 00:49:19.74ID:uR0Am4u5 bashごと持って行けばいいんじゃね?
他のインタプリタ系の言語ってみんなそうしてるっしょ?
他のインタプリタ系の言語ってみんなそうしてるっしょ?
528デフォルトの名無しさん
2019/08/05(月) 00:58:52.07ID:lQJxfKJu529デフォルトの名無しさん
2019/08/05(月) 01:59:22.26ID:053u+cPb sortは-hもよく使うな
du -hc * | sort -hみたいに
du -hc * | sort -hみたいに
530デフォルトの名無しさん
2019/08/05(月) 02:53:17.73ID:IFzEkeeB >>527
sortコマンドはBash組込みコマンドじゃないから関係ないんじゃ…
sortコマンドはBash組込みコマンドじゃないから関係ないんじゃ…
531デフォルトの名無しさん
2019/08/05(月) 04:07:47.17ID:RegSSUKZ busyboxをスクリプトに同梱して、
全部これに解釈させればいいじゃん
ashに加えて、よく使うコマンドも一緒についてくる
全部これに解釈させればいいじゃん
ashに加えて、よく使うコマンドも一緒についてくる
532デフォルトの名無しさん
2019/08/05(月) 04:23:15.10ID:IFzEkeeB いいじゃんと言われても…いいね。としか答えようがないw
533デフォルトの名無しさん
2019/08/05(月) 06:43:25.45ID:IFzEkeeB exitコマンドってexit $?とやってやらなくても前に実行したコマンドの終了コードを見てくれるんだな。
ずっとexit $?ってやってたわw
ずっとexit $?ってやってたわw
534デフォルトの名無しさん
2019/08/05(月) 07:20:51.08ID:O6CFE/yb if $? でやるより
&& || で分岐したほうが らしい 感じにならないか?
&& || で分岐したほうが らしい 感じにならないか?
535デフォルトの名無しさん
2019/08/05(月) 08:03:05.75ID:IFzEkeeB >>534
ああいや。
埋め込みシェルスクリプト(←なんて呼べばいいのか知らんけど
実行形式のファイルで冒頭に書かれてることがある
そのファイル自身を伸長するシェルスクリプトのこと)
で使ってたのよ。
#!/bin/sh
< "$0" sed -n '5,$p' | unar -
exit $?
こっからZIP
↑みたいに。
ああいや。
埋め込みシェルスクリプト(←なんて呼べばいいのか知らんけど
実行形式のファイルで冒頭に書かれてることがある
そのファイル自身を伸長するシェルスクリプトのこと)
で使ってたのよ。
#!/bin/sh
< "$0" sed -n '5,$p' | unar -
exit $?
こっからZIP
↑みたいに。
536デフォルトの名無しさん
2019/08/05(月) 11:46:23.87ID:MNXFY7cg tputの存在理由はわかるが
現実的な問題として、どういう場合にtput使ってよかったって思える?
もうエスケープシーケンス決め打ちでよくね?
現実的な問題として、どういう場合にtput使ってよかったって思える?
もうエスケープシーケンス決め打ちでよくね?
537デフォルトの名無しさん
2019/08/05(月) 12:52:22.28ID:IFzEkeeB clearコマンドがPOSIXで定められていないのをいいことに実装されていない環境がある。
そのときにtput clear。
そのときにtput clear。
538デフォルトの名無しさん
2019/08/05(月) 13:19:56.72ID:MNXFY7cg > 実装されていない環境がある。
「現実的な問題」っていうのはその実装されてない環境なんて、
今どきあるの?って話なんだよ。
「現実的な問題」っていうのはその実装されてない環境なんて、
今どきあるの?って話なんだよ。
539デフォルトの名無しさん
2019/08/05(月) 13:23:05.75ID:MNXFY7cg clearが実装されてない環境より
tputが実装されてない環境のほうが多くて、
tputを使うと逆に動かない環境の方が多くなっちゃう
例えばbusyboxとかalpine linuxとか
tputが実装されてない環境のほうが多くて、
tputを使うと逆に動かない環境の方が多くなっちゃう
例えばbusyboxとかalpine linuxとか
540デフォルトの名無しさん
2019/08/05(月) 13:31:42.54ID:O6CFE/yb which clear >/dev/null 2>&1 && echo has || echo 404
両対応書いておけばいい
両対応書いておけばいい
541デフォルトの名無しさん
2019/08/05(月) 14:26:42.83ID:MNXFY7cg /usr/share/terminfoの中を見てみたが、
シンボリックリンクを抜かして1700ものファイルがあった。
なるほどこれは大変だ。だがその中でどれだけのものが使われているのだろうか?
またどれだけ違いがあるのだろうか?ほとんどは細かい(殆ど使われない)
機能の違いでしか無いのではないか?
大抵は色を変えるぐらいしか使わないだろうし、
それ以上使っても画面サイズとカーソル移動ぐらいだろう。
数パターンしか違わないのであれば、独自対応も可能だろう。
実用レベルで考えるとtputを使うことは、使わないよりもデメリットが大きい気がしている。
シンボリックリンクを抜かして1700ものファイルがあった。
なるほどこれは大変だ。だがその中でどれだけのものが使われているのだろうか?
またどれだけ違いがあるのだろうか?ほとんどは細かい(殆ど使われない)
機能の違いでしか無いのではないか?
大抵は色を変えるぐらいしか使わないだろうし、
それ以上使っても画面サイズとカーソル移動ぐらいだろう。
数パターンしか違わないのであれば、独自対応も可能だろう。
実用レベルで考えるとtputを使うことは、使わないよりもデメリットが大きい気がしている。
542デフォルトの名無しさん
2019/08/05(月) 14:33:25.56ID:IMjI9HmJ vt100, xterm 以外設定した覚えがないな
543デフォルトの名無しさん
2019/08/05(月) 14:47:57.15ID:MNXFY7cg おそらく端末名の後ろは細かいバリエーションだろうからと削ってみたら789種類にまで減った
それでも数が多すぎるかつこんなの誰も使ってないやろと思ってしまって
何が違うのか把握する気が起きないレベル
でもinfocmpとか便利だな。よし俺の中で方針が決まった。
もしこれらの端末に対応しなければいけない自体になったら、
プログラムで直接tputを使用するのではなく、tputと同じ引き数で関数を実行しますから、
それで出力するエスケープシーケンスは設定ファイルで書き換えられるって方式にしよう。
さしあたって、現状、色を変えるだけしかやっとらんのだがtput使う必要あるのかな?
それでも数が多すぎるかつこんなの誰も使ってないやろと思ってしまって
何が違うのか把握する気が起きないレベル
でもinfocmpとか便利だな。よし俺の中で方針が決まった。
もしこれらの端末に対応しなければいけない自体になったら、
プログラムで直接tputを使用するのではなく、tputと同じ引き数で関数を実行しますから、
それで出力するエスケープシーケンスは設定ファイルで書き換えられるって方式にしよう。
さしあたって、現状、色を変えるだけしかやっとらんのだがtput使う必要あるのかな?
544デフォルトの名無しさん
2019/08/05(月) 14:55:51.10ID:uR0Am4u5 なんであるものを使わないんだろう
二段階認証おじさんみたいな頭の構造なんだろうか
二段階認証おじさんみたいな頭の構造なんだろうか
545デフォルトの名無しさん
2019/08/05(月) 15:27:49.43ID:MNXFY7cg > なんであるものを使わないんだろう
書いたでしょ? tputコマンドがない環境が現実としてある。
書いたでしょ? tputコマンドがない環境が現実としてある。
546デフォルトの名無しさん
2019/08/05(月) 15:54:00.38ID:MNXFY7cg 簡単なスクリプトを書いて、とりあえずcolsについて
データベースに登録されてる1700端末をすべて調べてみたが
すべてが 0x31 0x33 0x31 0x0a だった
boldだと非対応を除いて892端末。44パターン。結構違いがあるな
setafだと340端末、11パターン
まあtputを使うほうが楽だってのはわかるけど、エスケープシーケンスが違うのは
マイナー端末だろうし、数の割にパターン数は限られているので
完璧を求めたいなら別だけど使う環境で動けば良いわけで、tputを使用するのは過剰な気がするな。
データベースに登録されてる1700端末をすべて調べてみたが
すべてが 0x31 0x33 0x31 0x0a だった
boldだと非対応を除いて892端末。44パターン。結構違いがあるな
setafだと340端末、11パターン
まあtputを使うほうが楽だってのはわかるけど、エスケープシーケンスが違うのは
マイナー端末だろうし、数の割にパターン数は限られているので
完璧を求めたいなら別だけど使う環境で動けば良いわけで、tputを使用するのは過剰な気がするな。
547デフォルトの名無しさん
2019/08/05(月) 15:55:50.50ID:IMjI9HmJ tputがない環境って例えば何?
548デフォルトの名無しさん
2019/08/05(月) 16:04:49.48ID:MNXFY7cg む、/lib/terminfo/ 以下にも定義ファイルがあるのか
xterm-256colorがないのに使えると思ったら
まあ +40個しか変わらんけど
xterm-256colorがないのに使えると思ったら
まあ +40個しか変わらんけど
549デフォルトの名無しさん
2019/08/05(月) 16:05:10.32ID:MNXFY7cg >>547
書いたんだから上見ろ
書いたんだから上見ろ
550デフォルトの名無しさん
2019/08/05(月) 16:11:29.93ID:IMjI9HmJ まあいいけど日記はブログで書けや
551デフォルトの名無しさん
2019/08/05(月) 16:18:56.02ID:MNXFY7cg ブログねーしw ここはみんなのらくがき帳だ
552デフォルトの名無しさん
2019/08/05(月) 18:58:04.34ID:7Al1V6ob シェルスクリプトマスターの皆様
xxxxNN.txtというファイルが大量にあります(xxxxの部分はファイル名、NNの部分は0〜99の連番)
NNの部分が50未満ならxxxx50.txtにNNが50以上ならxxxx99.txtに一括でリネームしたいのですがやり方教えてください
xxxxNN.txtというファイルが大量にあります(xxxxの部分はファイル名、NNの部分は0〜99の連番)
NNの部分が50未満ならxxxx50.txtにNNが50以上ならxxxx99.txtに一括でリネームしたいのですがやり方教えてください
553デフォルトの名無しさん
2019/08/05(月) 19:10:26.82ID:AegVyuQi xxxx の部分はファイルによって異なるって前提でOK?
554デフォルトの名無しさん
2019/08/05(月) 19:15:29.15ID:7Al1V6ob >>553
YES
YES
555デフォルトの名無しさん
2019/08/05(月) 19:19:16.45ID:MNXFY7cg 無理に頭の体操的なことをせずに、こんな感じでいいでしょ?
for file in *; do
name=${file%[0-9]}
name=${name%[0-9]}
num=${file#$name}
[ $num -lt 50 ] && num=50 || num=99
mv "$file" "$name$num"
done
for file in *; do
name=${file%[0-9]}
name=${name%[0-9]}
num=${file#$name}
[ $num -lt 50 ] && num=50 || num=99
mv "$file" "$name$num"
done
556デフォルトの名無しさん
2019/08/05(月) 19:27:32.93ID:7Al1V6ob557デフォルトの名無しさん
2019/08/05(月) 19:28:09.53ID:MNXFY7cg 早速試すとか言ってるが、
適当に書いたからどうなっても知らんぞ。
適当に書いたからどうなっても知らんぞ。
558デフォルトの名無しさん
2019/08/05(月) 21:05:22.75ID:O6CFE/yb559デフォルトの名無しさん
2019/08/06(火) 08:47:13.20ID:fNxvG1AN ほとんど気にすることないと思うんだけどさ
みなさんが今まで携わってきたシステムでshが/bin/shにないシステムってあった?
http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap10.html
ここによると/bin/shは既定されてない→つまり必ずしもあるとは限らない
みたいなんだけど、そんなシステムあるかね?
Solarisとかなら…と思ったけど/bin/shだったし。
みなさんが今まで携わってきたシステムでshが/bin/shにないシステムってあった?
http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap10.html
ここによると/bin/shは既定されてない→つまり必ずしもあるとは限らない
みたいなんだけど、そんなシステムあるかね?
Solarisとかなら…と思ったけど/bin/shだったし。
560デフォルトの名無しさん
2019/08/06(火) 10:09:19.90ID:9obbnMlM Androidには/bin/shがないとか聞いたことあるな
561デフォルトの名無しさん
2019/08/06(火) 10:19:48.23ID:4kzCwlOl Androidはそもそも/binも/usrも無いな
mkshが/system/bin/shにある
mkshが/system/bin/shにある
562デフォルトの名無しさん
2019/08/06(火) 10:27:23.06ID:9obbnMlM Androidの環境ってよくわからん。
busyboxは採用して無くて、昔はtoolboxだったのが今はtoyboxを採用している。
しかしtoyboxのシェルであるtoyshは完成して無くてmkshを使っている。
という理解であってるんだろうか?
dockerfileないんかな?
busyboxは採用して無くて、昔はtoolboxだったのが今はtoyboxを採用している。
しかしtoyboxのシェルであるtoyshは完成して無くてmkshを使っている。
という理解であってるんだろうか?
dockerfileないんかな?
563デフォルトの名無しさん
2019/08/06(火) 17:00:21.88ID:g73t6D+3 Androidはヘッドレスでは立ち上がらんのじゃね?
昔見た限りだとinitスクリプト中でコケるんじゃないかと
昔見た限りだとinitスクリプト中でコケるんじゃないかと
564デフォルトの名無しさん
2019/08/07(水) 00:56:40.08ID:3XS5MIC7 Toyboxなんてものがあるのか。
565デフォルトの名無しさん
2019/08/07(水) 01:43:15.26ID:WK8NJ3/V diffみたいに二つのファイルを開いて、一行ずつ交互に比較できないかな?
bash依存禁止で
bash依存禁止で
566デフォルトの名無しさん
2019/08/07(水) 01:49:50.14ID:r57RWdCS diff使えばいいじゃん
567デフォルトの名無しさん
2019/08/07(水) 01:57:20.41ID:QJETJeRx diff のアルゴリズムは有名だから
あとはもっと具体的にどうさせたいのかによりそう
あとはもっと具体的にどうさせたいのかによりそう
568デフォルトの名無しさん
2019/08/07(水) 02:03:50.19ID:WK8NJ3/V 誰がdiffしたいっていったよ?
569デフォルトの名無しさん
2019/08/07(水) 02:43:40.37ID:fPg/gK/3 paste コマンド使うとか。見づらいけどw
$ paste -d '\n' file_a file_b
$ paste -d '\n' file_a file_b
570デフォルトの名無しさん
2019/08/07(水) 02:47:37.40ID:WK8NJ3/V 一旦質問を忘れて
同時に二つのファイルを開いて処理したい
同時に二つのファイルを開いて処理したい
571デフォルトの名無しさん
2019/08/07(水) 02:48:31.68ID:WK8NJ3/V 処理の内容は自由に変えられる
572デフォルトの名無しさん
2019/08/07(水) 02:56:33.93ID:fPg/gK/3 他のスクリプト言語を使う方が幸せになれる様な気がする
573デフォルトの名無しさん
2019/08/07(水) 03:19:53.88ID:prHDAaSE >>568
こんな奴に誰が答えたいと思うだろうか?
こんな奴に誰が答えたいと思うだろうか?
574デフォルトの名無しさん
2019/08/07(水) 03:26:49.06ID:arV/Dy+D またいつもの奴か
575デフォルトの名無しさん
2019/08/07(水) 03:43:34.68ID:3XS5MIC7 どうしてこう知識のない奴ほど傲慢なんだろうか。
576デフォルトの名無しさん
2019/08/07(水) 06:41:35.91ID:5FNsDR6i POSIXシェルのみで全て書くという縛りプレイが好きなんだろうw
POSIXは最低限のインターフェースを規格化しているだけで、結局はプラットフォーム別に書くしかないのが現状だからな
bashがあるならbashで書けばいい
GNU拡張が使えるなら使えばいい
あるもんは使えばいいんだよ
可搬性の幻想に囚われると逆に生産性が落ちる
POSIXは最低限のインターフェースを規格化しているだけで、結局はプラットフォーム別に書くしかないのが現状だからな
bashがあるならbashで書けばいい
GNU拡張が使えるなら使えばいい
あるもんは使えばいいんだよ
可搬性の幻想に囚われると逆に生産性が落ちる
577デフォルトの名無しさん
2019/08/07(水) 06:56:03.49ID:5FNsDR6i578デフォルトの名無しさん
2019/08/07(水) 07:11:20.44ID:aj+f89Vu >>575
パソコンの大先生にありがち。知識は少しはあると自負のアンバランスからだな
パソコンの大先生にありがち。知識は少しはあると自負のアンバランスからだな
579デフォルトの名無しさん
2019/08/07(水) 08:36:36.73ID:QJETJeRx awk で丸飲みしちゃえ
1ファイル1配列
メモリ節約なら
1行ずつ読むのをシンクロさせる
1ファイル1配列
メモリ節約なら
1行ずつ読むのをシンクロさせる
580デフォルトの名無しさん
2019/08/07(水) 11:22:21.65ID:WK8NJ3/V >>575
ほんとそれなw
できるのに、知識ないやつほどぐだぐだとレスをする
答えられないのを質問者のせいにする
exec 3<file1.txt
exec 4<file2.txt
read -r file1<&3
read -r file2<&4
echo "$file1 $file2"
read -r file1<&3
read -r file2<&4
echo "$file1 $file2"
ほんとそれなw
できるのに、知識ないやつほどぐだぐだとレスをする
答えられないのを質問者のせいにする
exec 3<file1.txt
exec 4<file2.txt
read -r file1<&3
read -r file2<&4
echo "$file1 $file2"
read -r file1<&3
read -r file2<&4
echo "$file1 $file2"
581デフォルトの名無しさん
2019/08/07(水) 11:28:44.82ID:3XS5MIC7 重症だなこりゃ
582デフォルトの名無しさん
2019/08/07(水) 11:31:15.75ID:WK8NJ3/V ちなみに>>580は
一回目のechoはファイルの1行目、
二回目のechoはファイルの2行目が
ちゃんと表示されるからなw
お前ら勉強してちゃんと質問に答えられるようになれよ
中途半端な知識で満足するな
一回目のechoはファイルの1行目、
二回目のechoはファイルの2行目が
ちゃんと表示されるからなw
お前ら勉強してちゃんと質問に答えられるようになれよ
中途半端な知識で満足するな
583デフォルトの名無しさん
2019/08/07(水) 11:36:26.97ID:5FNsDR6i584デフォルトの名無しさん
2019/08/07(水) 11:37:40.18ID:WK8NJ3/V などと、質問には答えずに
それでも悔しいからか、レスだけはするようで
それでも悔しいからか、レスだけはするようで
585デフォルトの名無しさん
2019/08/07(水) 11:41:40.99ID:9POPBXN5 すげえ嫌な感じの方法思い付いた。
まず二つのファイルの行数だけ wc -l で調べ、小さい方を max に入れておく。
n=1 にしてから max までループさせて、ループの中で awk を使って NR==$n の一行を双方のファイルから抜き出してそれぞれ別の変数に入れる。
なんてことをすると2つの(またはそれよりも多くの)ファイルから1行抜き出して何かをする事は可能だ。
しかし行が長くなればなるほど無駄な処理が増えて時間が掛かることは言うまでもない。
大変効率の悪い方法だ。
まず二つのファイルの行数だけ wc -l で調べ、小さい方を max に入れておく。
n=1 にしてから max までループさせて、ループの中で awk を使って NR==$n の一行を双方のファイルから抜き出してそれぞれ別の変数に入れる。
なんてことをすると2つの(またはそれよりも多くの)ファイルから1行抜き出して何かをする事は可能だ。
しかし行が長くなればなるほど無駄な処理が増えて時間が掛かることは言うまでもない。
大変効率の悪い方法だ。
586デフォルトの名無しさん
2019/08/07(水) 11:48:42.74ID:5FNsDR6i >>582
それやりたいなら普通はpaste使うけどな
それやりたいなら普通はpaste使うけどな
587デフォルトの名無しさん
2019/08/07(水) 11:48:48.99ID:WK8NJ3/V588デフォルトの名無しさん
2019/08/07(水) 11:48:50.45ID:9POPBXN5 >>580
おお。それでできるな。
おお。それでできるな。
589デフォルトの名無しさん
2019/08/07(水) 11:51:13.86ID:9POPBXN5590デフォルトの名無しさん
2019/08/07(水) 11:53:37.08ID:WK8NJ3/V >>586
> それやりたいなら普通はpaste使うけどな
残念ながらpasteでは自由な処理ができない
例えば、1つ目のファイルに書いてある命令を解釈しながら
2つ目のファイルを読み込んだり、他の処理をしたりとかね。
> それやりたいなら普通はpaste使うけどな
残念ながらpasteでは自由な処理ができない
例えば、1つ目のファイルに書いてある命令を解釈しながら
2つ目のファイルを読み込んだり、他の処理をしたりとかね。
591デフォルトの名無しさん
2019/08/07(水) 11:56:37.01ID:WK8NJ3/V で、POSIXで簡単にできることを、答えられずに
他の言語でやれとか、自由な処理をしたいっていうのに
それを理解しない答えを返してる奴ら
質問者の俺自身に、完璧な答えを出された気持ちはどう?w
他の言語でやれとか、自由な処理をしたいっていうのに
それを理解しない答えを返してる奴ら
質問者の俺自身に、完璧な答えを出された気持ちはどう?w
592デフォルトの名無しさん
2019/08/07(水) 11:57:46.26ID:WK8NJ3/V またいい問題を思いついたら、質問(?)してやるから
じゃーねーw
じゃーねーw
593デフォルトの名無しさん
2019/08/07(水) 11:57:52.31ID:5FNsDR6i594デフォルトの名無しさん
2019/08/07(水) 12:00:28.63ID:WK8NJ3/V >>593
同時に二つのファイルを開いて処理したい
って言った。
処理の内容は自由に変えられる
って言った。
同時に二つのファイルを開く以外のなにも条件として出してない
それができれば、いろいろと応用が効く
特定のことしかできないdiffやpasteでは
処理の内容が変えられないだろ
同時に二つのファイルを開いて処理したい
って言った。
処理の内容は自由に変えられる
って言った。
同時に二つのファイルを開く以外のなにも条件として出してない
それができれば、いろいろと応用が効く
特定のことしかできないdiffやpasteでは
処理の内容が変えられないだろ
595デフォルトの名無しさん
2019/08/07(水) 12:03:18.97ID:5FNsDR6i596デフォルトの名無しさん
2019/08/07(水) 12:04:06.23ID:9POPBXN5 >>591
なんで自分でわかるのに質問したのか謎
なんで自分でわかるのに質問したのか謎
597デフォルトの名無しさん
2019/08/07(水) 12:06:48.70ID:5FNsDR6i598デフォルトの名無しさん
2019/08/07(水) 12:08:56.79ID:fPg/gK/3 うーん、、、こんな感じ?
$ paste -d '\n' file1 file2 | xargs -d '\n' -n 2 | sh
file1 と file2 の内容例
file1:
====
ls
cp
mv
====
file2:
====
.
x y
y z
====
$ paste -d '\n' file1 file2 | xargs -d '\n' -n 2 | sh
file1 と file2 の内容例
file1:
====
ls
cp
mv
====
file2:
====
.
x y
y z
====
599デフォルトの名無しさん
2019/08/07(水) 12:15:06.92ID:9POPBXN5 あー。「どうだ俺はこんなにできるんだすごいだろう」みたいな。
じゃあ本当にやりたかった事は複数ファイル処理ではなくて自分の能力自慢か。
人から認められて承認欲求を満たしたいってことでもあるかな。
いつも人からバカにされてるから何かで人をバカにしたいというのもあるかも知れない。
合掌。
じゃあ本当にやりたかった事は複数ファイル処理ではなくて自分の能力自慢か。
人から認められて承認欲求を満たしたいってことでもあるかな。
いつも人からバカにされてるから何かで人をバカにしたいというのもあるかも知れない。
合掌。
600デフォルトの名無しさん
2019/08/07(水) 12:15:09.78ID:5FNsDR6i601デフォルトの名無しさん
2019/08/07(水) 12:17:59.15ID:WK8NJ3/V602デフォルトの名無しさん
2019/08/07(水) 12:19:12.78ID:WK8NJ3/V603デフォルトの名無しさん
2019/08/07(水) 12:21:45.21ID:WK8NJ3/V >>599
最初に用件をちゃんといってるのに、例をいうとその例しかできない方法を出すし
その質問にたいする曲解を潰していくうちに、その時間で自分で調べて解決できてしまうんだから
どうしろっていうんだw
最初に用件をちゃんといってるのに、例をいうとその例しかできない方法を出すし
その質問にたいする曲解を潰していくうちに、その時間で自分で調べて解決できてしまうんだから
どうしろっていうんだw
604デフォルトの名無しさん
2019/08/07(水) 12:22:22.45ID:WK8NJ3/V やっぱ「自決しました」で終わらせたほうが良かったか?
605デフォルトの名無しさん
2019/08/07(水) 12:32:00.78ID:9POPBXN5 >>603
普通にわからなくて質問していてやがて自分でわかった場合、普通はそれまでに答えてくれた人に対するお礼をするしこういう方法で出来ましたと自分のやったことを書く。
君の場合なぜか答えてくれた人に対する感謝の念がない。書かれたことが間違いや見当外れのことであっても普通は書いてくれたというだけで感謝するものだ。
しないとするなら少なくともその質問は質問に偽装された何か別のものだ。
普通にわからなくて質問していてやがて自分でわかった場合、普通はそれまでに答えてくれた人に対するお礼をするしこういう方法で出来ましたと自分のやったことを書く。
君の場合なぜか答えてくれた人に対する感謝の念がない。書かれたことが間違いや見当外れのことであっても普通は書いてくれたというだけで感謝するものだ。
しないとするなら少なくともその質問は質問に偽装された何か別のものだ。
606デフォルトの名無しさん
2019/08/07(水) 12:36:21.05ID:5FNsDR6i >>604
teratailとかSOで叩かれてこい
teratailとかSOで叩かれてこい
607デフォルトの名無しさん
2019/08/07(水) 12:37:21.72ID:WK8NJ3/V >>605
いい加減、客様は神様です。はやめたほうが良いよw
いい加減、客様は神様です。はやめたほうが良いよw
608デフォルトの名無しさん
2019/08/07(水) 12:42:23.91ID:9POPBXN5 >>607
言っている意味がわからない。何か特殊な宗教でも信奉しているのかね?
言っている意味がわからない。何か特殊な宗教でも信奉しているのかね?
609デフォルトの名無しさん
2019/08/07(水) 12:45:25.69ID:WK8NJ3/V610デフォルトの名無しさん
2019/08/07(水) 13:00:34.72ID:9POPBXN5611デフォルトの名無しさん
2019/08/07(水) 13:17:46.60ID:VwbuDBsd612デフォルトの名無しさん
2019/08/07(水) 13:23:21.21ID:WK8NJ3/V 日本の礼儀と隣国の話しかできないのが世界が狭いよな
613デフォルトの名無しさん
2019/08/07(水) 13:27:24.72ID:9POPBXN5 >>611
何かを与えてくれたらお礼をするのは国に関係なくどこでも共通の礼儀だが、君はそれをしないばかりか与えてもらって当然と考えるとするならば、それは正に今の韓国と同じだね。
何かを与えてくれたらお礼をするのは国に関係なくどこでも共通の礼儀だが、君はそれをしないばかりか与えてもらって当然と考えるとするならば、それは正に今の韓国と同じだね。
614デフォルトの名無しさん
2019/08/07(水) 13:29:19.39ID:9POPBXN5 優遇して与えていた側に礼を言わないばかりか盗人猛々しいとでも言うかね?
615デフォルトの名無しさん
2019/08/07(水) 13:31:40.13ID:WK8NJ3/V ということで、質問に対して
答えを返した俺に感謝しろ
という話さ
答えを返した俺に感謝しろ
という話さ
616デフォルトの名無しさん
2019/08/07(水) 13:37:09.23ID:5FNsDR6i これ触っちゃあかんやつや
617デフォルトの名無しさん
2019/08/07(水) 13:39:19.49ID:WK8NJ3/V 俺は別に自決しましたで終わらせても良かったんだが、
俺ができるってことを示さなければ、
シェルスクリプトで同時に二つのファイルを開けるってことも
知らなかったんだろうな
俺ができるってことを示さなければ、
シェルスクリプトで同時に二つのファイルを開けるってことも
知らなかったんだろうな
618デフォルトの名無しさん
2019/08/07(水) 13:41:42.46ID:aj+f89Vu >>616
それを触りすぎw
それを触りすぎw
619デフォルトの名無しさん
2019/08/07(水) 13:46:29.59ID:WK8NJ3/V この先の人生、似たような問題に直面したとき、
今日の会話を思い出しながらも、なかったことにして
俺が回答したテクニックを使うのだろう
今日の会話を思い出しながらも、なかったことにして
俺が回答したテクニックを使うのだろう
620デフォルトの名無しさん
2019/08/07(水) 13:49:03.15ID:9POPBXN5 >>615
質問者は君自信だ。それに関しては君が君に感謝すれば良い。他の人は少なくとも同じ質問はしていないのだから君に感謝する必要はない。
という、普通の事が君にはわからないのか?発達障害か何かか?だったらしょうがないから形だけ他の人を真似て合わせろ。そうすれば無用なトラブルは減らせる。
質問者は君自信だ。それに関しては君が君に感謝すれば良い。他の人は少なくとも同じ質問はしていないのだから君に感謝する必要はない。
という、普通の事が君にはわからないのか?発達障害か何かか?だったらしょうがないから形だけ他の人を真似て合わせろ。そうすれば無用なトラブルは減らせる。
621デフォルトの名無しさん
2019/08/07(水) 13:51:39.12ID:WK8NJ3/V ん?他の人って会話に参加してる人だけのことだと思ってるのか?
検索で見つけた人とかあるだろう。
相変わらず視野が狭いんだな。
検索で見つけた人とかあるだろう。
相変わらず視野が狭いんだな。
622デフォルトの名無しさん
2019/08/07(水) 14:04:14.01ID:WK8NJ3/V 検索した人は俺に感謝する。ここでレスしてたやつも同じ問題がでたとき
嫌々ながら俺に感謝する。ウィン♪ウィン♪ってやつではないか
嫌々ながら俺に感謝する。ウィン♪ウィン♪ってやつではないか
623デフォルトの名無しさん
2019/08/07(水) 14:08:05.92ID:9POPBXN5 >>621
おだいじに。
おだいじに。
624デフォルトの名無しさん
2019/08/07(水) 14:09:22.96ID:9POPBXN5 夏の暑さも酷なことをするもんだ。
625デフォルトの名無しさん
2019/08/07(水) 14:11:08.56ID:WK8NJ3/V エアコンもってないのか?
626デフォルトの名無しさん
2019/08/07(水) 15:11:31.23ID:3XS5MIC7 どうでもいいけどアレを「完璧な回答」とか言ってる時点でお察しw
ファイルディスクリプタを使った方法にはPOSIXの範囲では解決できない重大な落とし穴がある。
まあ態々言わなくても分かるだろうから,明言はしないがw
ファイルディスクリプタを使った方法にはPOSIXの範囲では解決できない重大な落とし穴がある。
まあ態々言わなくても分かるだろうから,明言はしないがw
627デフォルトの名無しさん
2019/08/07(水) 15:23:56.01ID:3XS5MIC7 ああ一応分からん人の為にヒントをいうと,実は2018年あたりの過去スレで言及してる。
628デフォルトの名無しさん
2019/08/07(水) 18:34:55.40ID:WK8NJ3/V ※その落とし穴がなんなのか言わないのは、わからん人のためよりも
俺に意地悪をすることを選んだから。結局それがそいつの本性なんだよ。
俺に意地悪をすることを選んだから。結局それがそいつの本性なんだよ。
629デフォルトの名無しさん
2019/08/07(水) 19:38:28.14ID:DcvmRDxD {{"item1":["key1":"value1"]},{"item2":["key2":"value2"]}}
{{"item1":["key1":"value1"]}}
{}
{{"item1":["key1":"value1"]},{"item2":["key2":"value2"]},{"item3":["key3":"value3"]}}
みたいに中途半端なjsonがたくさん混ざっているファイルを
item1,item2,item3
value1,value2,
value1,,
,,
value1,value2,value3
のような綺麗なcsvで出力する方法ってありますか?
jqコマンドを使っても上手くいかず……
{{"item1":["key1":"value1"]}}
{}
{{"item1":["key1":"value1"]},{"item2":["key2":"value2"]},{"item3":["key3":"value3"]}}
みたいに中途半端なjsonがたくさん混ざっているファイルを
item1,item2,item3
value1,value2,
value1,,
,,
value1,value2,value3
のような綺麗なcsvで出力する方法ってありますか?
jqコマンドを使っても上手くいかず……
630デフォルトの名無しさん
2019/08/07(水) 19:41:37.81ID:WK8NJ3/V631デフォルトの名無しさん
2019/08/07(水) 19:46:34.34ID:WK8NJ3/V 1行ずつループで回してもできそうだが、なんどもjqコマンドを呼び出すことになって
時間がかかりそうだから、
[
1行目 ,
2行目 ,
3行目 ,
4行目
]
みたいに変換して、jq一発にしたほうが速いだろうな。
そのやり方は、俺以外でも答えられるやろ?
時間がかかりそうだから、
[
1行目 ,
2行目 ,
3行目 ,
4行目
]
みたいに変換して、jq一発にしたほうが速いだろうな。
そのやり方は、俺以外でも答えられるやろ?
632デフォルトの名無しさん
2019/08/07(水) 22:04:49.28ID:fPg/gK/3 >>629
GNU awk 4.0.0 以降で
$ gawk -ijoin -vFPAT='"[^"]+"' '{
for(i=1;i<=NF;i+=3){
item[$i]=1
row[NR,$i]=$(i+2)
}
}END{
for(i in item){x[n++]=i}
n--
print join(x,0,n,",")
for(i=1;i<=NR;i++){
k=0
for(j in x){
r[k++]=row[i,x[j]]
}
print join(r,0,n,",")
}
}' data.jsonl
GNU awk 4.0.0 以降で
$ gawk -ijoin -vFPAT='"[^"]+"' '{
for(i=1;i<=NF;i+=3){
item[$i]=1
row[NR,$i]=$(i+2)
}
}END{
for(i in item){x[n++]=i}
n--
print join(x,0,n,",")
for(i=1;i<=NR;i++){
k=0
for(j in x){
r[k++]=row[i,x[j]]
}
print join(r,0,n,",")
}
}' data.jsonl
633デフォルトの名無しさん
2019/08/08(木) 02:47:04.99ID:/tBUMiMq これは、Ruby で、JSON.parse できない。
何や、この形式は?
{"item1":["key1":"value1"]}
[ ] の中に、{ } を入れたら、OK だが、
{"item1":[{"key1":"value1"}]}
何や、この形式は?
{"item1":["key1":"value1"]}
[ ] の中に、{ } を入れたら、OK だが、
{"item1":[{"key1":"value1"}]}
634633
2019/08/08(木) 03:01:29.15ID:/tBUMiMq https://jsonformatter.curiousconcept.com/
このサイトで、JSON の形式が正しいかどうかチェックしたら、エラーになった!
{"item1":["key1":"value1"]}
Error:Expecting comma or ], not colon.
このサイトで、JSON の形式が正しいかどうかチェックしたら、エラーになった!
{"item1":["key1":"value1"]}
Error:Expecting comma or ], not colon.
635デフォルトの名無しさん
2019/08/08(木) 03:55:09.53ID:10jj0QOT636デフォルトの名無しさん
2019/08/08(木) 06:10:00.05ID:l7k6B2kQ >>629
{{"item1":["key1":"value1"]}}
じゃなくて
{{"aaaa":["bbbb":"cccc"]}}
でも
"cccc" って表示されるけどOK?
あと {{"item1":["key1":"val\"ue1"]}}
みたいに " がデータに入ってる場合はあるの?
それと key1、key2、key3 ってキー名が変わるのは正しいの?
jsonlとしても正しくないけど、書き間違いじゃないの?
{{"item1":["key1":"value1"]}}
じゃなくて
{{"aaaa":["bbbb":"cccc"]}}
でも
"cccc" って表示されるけどOK?
あと {{"item1":["key1":"val\"ue1"]}}
みたいに " がデータに入ってる場合はあるの?
それと key1、key2、key3 ってキー名が変わるのは正しいの?
jsonlとしても正しくないけど、書き間違いじゃないの?
637デフォルトの名無しさん
2019/08/08(木) 07:06:18.58ID:DLp++heI638633
2019/08/08(木) 07:20:32.75ID:/tBUMiMq JavaScript で、: は、オブジェクトの属性だろ。
だから、{ } 内でしか使えない
だから、1 はダメで、2, 3 はOK
1. {"item1":["key1":"value1"]}
2.1 {"item1":["value1"]}
2.2 {"item1":["key1","value1"]}
3. {"item1":[{"key1":"value1"}]}
だから、{ } 内でしか使えない
だから、1 はダメで、2, 3 はOK
1. {"item1":["key1":"value1"]}
2.1 {"item1":["value1"]}
2.2 {"item1":["key1","value1"]}
3. {"item1":[{"key1":"value1"}]}
639デフォルトの名無しさん
2019/08/08(木) 07:25:15.97ID:l7k6B2kQ フォーマットが不自然なんだよな。独自フォーマットなら
その仕様を言ってくれないと答えようがない。
例えば、そこに書いてあるキー以外も存在するのか?とか
改行はどうなってるのかとか
その仕様を言ってくれないと答えようがない。
例えば、そこに書いてあるキー以外も存在するのか?とか
改行はどうなってるのかとか
640デフォルトの名無しさん
2019/08/08(木) 09:21:44.35ID:rLFqUIXU641デフォルトの名無しさん
2019/08/08(木) 10:06:35.63ID:X/CTiqlR 本物のjsonにしちゃえ
独自フォーマットする利点ないでしょ
独自フォーマットする利点ないでしょ
642デフォルトの名無しさん
2019/08/08(木) 11:39:13.74ID:/tBUMiMq 独自形式など、作るだけ無駄
パーサーを作るにも、特殊文字のエスケープ処理など、バグが増えるだけ!
パーサーを作るにも、特殊文字のエスケープ処理など、バグが増えるだけ!
643デフォルトの名無しさん
2019/08/08(木) 11:47:10.43ID:FeKpuToe 昨日質問したものですが中途半端に書いてしまい申し訳ありませんでした
まだ勉強不足の学生でして……
こっちが正しいjsonと出力させたい内容です
{"aaa":{"bbb":["ccc"]},"xxx":{"yyy":["zzz"]},"あああ":{"いいい":["ううう"]}}
{"aaa":{"bbb":["ccc"]},"xxx":{"yyy":["zzz"]}}
{}
{"aaa":{"bbb":["ccc"]}}
↓
aaa,xxx,あああ
ccc,zzz,いいい
ccc,zzz,
,,
ccc,,
まだ勉強不足の学生でして……
こっちが正しいjsonと出力させたい内容です
{"aaa":{"bbb":["ccc"]},"xxx":{"yyy":["zzz"]},"あああ":{"いいい":["ううう"]}}
{"aaa":{"bbb":["ccc"]},"xxx":{"yyy":["zzz"]}}
{}
{"aaa":{"bbb":["ccc"]}}
↓
aaa,xxx,あああ
ccc,zzz,いいい
ccc,zzz,
,,
ccc,,
644デフォルトの名無しさん
2019/08/08(木) 11:47:20.30ID:FeKpuToe jsonlですね
645デフォルトの名無しさん
2019/08/08(木) 11:53:47.59ID:FeKpuToe aaa,xxx,あああ
ccc,zzz,ううう
ccc,zzz,
,,
ccc,,
です
ccc,zzz,ううう
ccc,zzz,
,,
ccc,,
です
646デフォルトの名無しさん
2019/08/08(木) 12:28:53.27ID:FeKpuToe 連レスすみません
例えばaaaとあああだけ抜き取りたい場合
さきほどのjsonlから
aaa,あああ
ccc,ううう
ccc,
,
ccc,
と表示させる方法も知りたいです。
全部表示させた後にawkで削除した方がいいのでしょうか?
例えばaaaとあああだけ抜き取りたい場合
さきほどのjsonlから
aaa,あああ
ccc,ううう
ccc,
,
ccc,
と表示させる方法も知りたいです。
全部表示させた後にawkで削除した方がいいのでしょうか?
647デフォルトの名無しさん
2019/08/08(木) 12:42:36.15ID:X/CTiqlR 使いまわせるから
...|awk 'Xxx'
...|awk 'Xxx'
648デフォルトの名無しさん
2019/08/08(木) 12:46:24.42ID:0w2TiazL649デフォルトの名無しさん
2019/08/08(木) 12:56:15.36ID:PTwvjoI/650デフォルトの名無しさん
2019/08/08(木) 13:40:08.52ID:l7k6B2kQ >>646
もとのデータが悪かっただけ。
jsonlだったらjqで普通に扱える。
echo "aaa,xxx,あああ";
jq -r '[.aaa.bbb[0], .xxx.yyy[0], ."あああ"."いいい"[0]] | @csv' data.jsonl
ダブルクォートがいらないなら、@csvをjoin(",")にする
こことか見れば良い
https://medium.com/veltra-engineering/jq-supports-json-to-csv-fb5c951a9575
もとのデータが悪かっただけ。
jsonlだったらjqで普通に扱える。
echo "aaa,xxx,あああ";
jq -r '[.aaa.bbb[0], .xxx.yyy[0], ."あああ"."いいい"[0]] | @csv' data.jsonl
ダブルクォートがいらないなら、@csvをjoin(",")にする
こことか見れば良い
https://medium.com/veltra-engineering/jq-supports-json-to-csv-fb5c951a9575
651デフォルトの名無しさん
2019/08/08(木) 14:01:33.05ID:SmETYGNQ652デフォルトの名無しさん
2019/08/08(木) 14:03:20.11ID:l7k6B2kQ なるほどjqコマンドだけでやるにはこうすればいいのか
jq -r -s '["aaa","xxx","あああ"], (.[] | [.aaa.bbb[0], .xxx.yyy[0], ."あああ"."いいい"[0]]) | @csv' data.jsonl
jq -r -s '["aaa","xxx","あああ"], (.[] | [.aaa.bbb[0], .xxx.yyy[0], ."あああ"."いいい"[0]]) | @csv' data.jsonl
654デフォルトの名無しさん
2019/08/08(木) 14:12:53.47ID:DLp++heI なんだかなーw
655デフォルトの名無しさん
2019/08/08(木) 14:16:46.09ID:SmETYGNQ 今調べてみたら
.aaa.bbb[]と入力していたので全部一致してないとエラーになってたっぽいです
.aaa.bbb[0]に変えている>>650では一致してないところも空欄で出力されてましたので求めるものでした
.aaa.bbb[]と入力していたので全部一致してないとエラーになってたっぽいです
.aaa.bbb[0]に変えている>>650では一致してないところも空欄で出力されてましたので求めるものでした
656デフォルトの名無しさん
2019/08/08(木) 14:20:36.14ID:10jj0QOT >>653
もしかして皮肉という概念をご存知ない…?
もしかして皮肉という概念をご存知ない…?
657デフォルトの名無しさん
2019/08/08(木) 14:26:26.08ID:DLp++heI658デフォルトの名無しさん
2019/08/08(木) 14:29:47.06ID:SmETYGNQ >>657
要素数は一つですので大丈夫です。
要素数は一つですので大丈夫です。
659デフォルトの名無しさん
2019/08/08(木) 14:41:50.23ID:DLp++heI >>658
問題ないならいいけど [0] より []? 使ったほうが良いよ
問題ないならいいけど [0] より []? 使ったほうが良いよ
660デフォルトの名無しさん
2019/08/08(木) 14:45:49.24ID:PRJfiUWC bashって可変長引数で綺麗に処理できないの?
bash test.sh a b c d e
って打ったら
xaz,xbz,xcz,xdz,xez
bash test.sh a b c
って打ったら
xaz,xbz,xcz
って出るものを作りたいんだが$@を使って色々やっても
xa b c d ez,
って出力しかできぬ
bash test.sh a b c d e
って打ったら
xaz,xbz,xcz,xdz,xez
bash test.sh a b c
って打ったら
xaz,xbz,xcz
って出るものを作りたいんだが$@を使って色々やっても
xa b c d ez,
って出力しかできぬ
662631
2019/08/08(木) 14:50:53.94ID:l7k6B2kQ printf 'x%sz,' a b c d e
xaz,xbz,xcz,xdz,xez,
xaz,xbz,xcz,xdz,xez,
663デフォルトの名無しさん
2019/08/08(木) 14:55:38.24ID:X/CTiqlR >>660
while [ $# -gt 0 ];
do
printf x
printf $1
printf "z\n"
shift
done
sh multi_arg.sh a b c d e
xaz
xbz
xcz
xdz
xez
\nいらなかったな
あと間に,でやるやつ必要か
そのへんpass
while [ $# -gt 0 ];
do
printf x
printf $1
printf "z\n"
shift
done
sh multi_arg.sh a b c d e
xaz
xbz
xcz
xdz
xez
\nいらなかったな
あと間に,でやるやつ必要か
そのへんpass
664631
2019/08/08(木) 15:01:30.29ID:l7k6B2kQ ぶっちゃけ $@ を使ってどうやれば
xa b c d ez, が出せるんだろうって悩むレベルw
xa b c d ez, が出せるんだろうって悩むレベルw
665デフォルトの名無しさん
2019/08/08(木) 15:10:54.30ID:PTwvjoI/ $ set -- {a..e}
$ l=;for v in "$@";do l="${l}${l:+,}${v}";done;echo "$l"
for 文で "in" を省略すると "$@" が対象になるので
$ l=;for v;do l="${l}${l:+,}${v}";done;echo "$l"
としても可。
$ l=;for v in "$@";do l="${l}${l:+,}${v}";done;echo "$l"
for 文で "in" を省略すると "$@" が対象になるので
$ l=;for v;do l="${l}${l:+,}${v}";done;echo "$l"
としても可。
666デフォルトの名無しさん
2019/08/08(木) 15:33:36.84ID:PTwvjoI/ いけね、x と z で挟むの忘れてたわ
$ l=;for v;do l="${l}${l:+,}x${v}z";done;echo "$l"
$ l=;for v;do l="${l}${l:+,}x${v}z";done;echo "$l"
667デフォルトの名無しさん
2019/08/08(木) 18:25:37.21ID:cY5mPUh7 >>660や
これを1まとめの変数にする方法ってあるか?
bash test.sh a b c d
って打つと↓を変数で使えるようにしたい(最後だけ,を外して)
xaz,xbz,xcz,xdz
ループさせて配列に入れて${test[@]}でxaz,xbz,xcz,xdz,
って出力させることならできたけど最後の,が邪魔で仕方ない
これを1まとめの変数にする方法ってあるか?
bash test.sh a b c d
って打つと↓を変数で使えるようにしたい(最後だけ,を外して)
xaz,xbz,xcz,xdz
ループさせて配列に入れて${test[@]}でxaz,xbz,xcz,xdz,
って出力させることならできたけど最後の,が邪魔で仕方ない
668デフォルトの名無しさん
2019/08/08(木) 18:27:40.23ID:l7k6B2kQ > これを1まとめの変数にする方法ってあるか?
あるに決まってるだろ。
自分でやり方を模索しろや
> 最後の,が邪魔で仕方ない
ならつかないようにするか消せばいいだけだろ
あるに決まってるだろ。
自分でやり方を模索しろや
> 最後の,が邪魔で仕方ない
ならつかないようにするか消せばいいだけだろ
669デフォルトの名無しさん
2019/08/08(木) 18:31:34.31ID:l7k6B2kQ シェルスクリプト特有のテクニックがわからないならともかく
常識的なやり方すら見いだせないなら適性無いで
常識的なやり方すら見いだせないなら適性無いで
670デフォルトの名無しさん
2019/08/08(木) 18:37:00.79ID:cY5mPUh7 マウント上等!教えてくれ!
${test[@]%,*}でいけると思ったが、これって配列じゃ無理なんか
悔しいねぇw
${test[@]%,*}でいけると思ったが、これって配列じゃ無理なんか
悔しいねぇw
671デフォルトの名無しさん
2019/08/08(木) 18:38:11.84ID:l7k6B2kQ 誰かが教えてやってるやろ
672デフォルトの名無しさん
2019/08/08(木) 18:38:45.45ID:10jj0QOT673デフォルトの名無しさん
2019/08/08(木) 18:39:41.22ID:l7k6B2kQ おいおい。IDみろよ。俺は重大な落とし穴があるで
教えんけどなー。みたいなことは言わない。
教えんけどなー。みたいなことは言わない。
674デフォルトの名無しさん
2019/08/08(木) 18:41:43.33ID:10jj0QOT >>667
$ cat ./test.sh
eval -- "var=$(printf 'x%sz,' $@ | sed -e 's/,$//')"
echo $var
$ bash ./test.sh a b c d
xaz,xbz,xcz,xdz
どうぞ。
$ cat ./test.sh
eval -- "var=$(printf 'x%sz,' $@ | sed -e 's/,$//')"
echo $var
$ bash ./test.sh a b c d
xaz,xbz,xcz,xdz
どうぞ。
675デフォルトの名無しさん
2019/08/08(木) 18:42:02.61ID:zA0vFDSV シェルスクリプトにこだわっても意味内
単なる自己満足
単なる自己満足
676デフォルトの名無しさん
2019/08/08(木) 18:43:40.32ID:l7k6B2kQ >>674
evalいらねーだろ。その程度でいーばるーなよw
evalいらねーだろ。その程度でいーばるーなよw
677デフォルトの名無しさん
2019/08/08(木) 18:47:18.20ID:l7k6B2kQ あと、eval の -- は POSIX準拠じゃない。 dashではエラーになるな。
678デフォルトの名無しさん
2019/08/08(木) 18:49:50.48ID:l7k6B2kQ それと $@(と$var)にダブルクォートがついてないのもマイナス点だな
679デフォルトの名無しさん
2019/08/08(木) 18:52:26.35ID:PTwvjoI/ >>674
$ bash ./test.sh a "b c" d
xaz,xbz,xcz,xdz
となってしまうので、
var=$(printf 'x%sz,' "$@" | sed -e 's/,$//')
か
var=$(printf 'x%sz,' "$@" | head -c -1)
$ bash ./test.sh a "b c" d
xaz,xbz,xcz,xdz
となってしまうので、
var=$(printf 'x%sz,' "$@" | sed -e 's/,$//')
か
var=$(printf 'x%sz,' "$@" | head -c -1)
680デフォルトの名無しさん
2019/08/08(木) 18:59:43.93ID:X/CTiqlR 多分配列つめこんで paste で糊付けしてくれる
paste はいわゆる join()のはず
paste はいわゆる join()のはず
681デフォルトの名無しさん
2019/08/08(木) 18:59:47.03ID:l7k6B2kQ sed呼び出すぐらいならParameter expansionを使ったほうが楽で速いだろう
682デフォルトの名無しさん
2019/08/08(木) 19:04:50.27ID:cY5mPUh7 お前らありがとう
want="$(IFS=,; echo "${test[*]}"}"
ってやったら求めるものが出せた
want="$(IFS=,; echo "${test[*]}"}"
ってやったら求めるものが出せた
683デフォルトの名無しさん
2019/08/08(木) 19:09:09.68ID:10jj0QOT >>677
bash前提のスクリプトなんですがそれは
bash前提のスクリプトなんですがそれは
684デフォルトの名無しさん
2019/08/08(木) 19:09:41.31ID:l7k6B2kQ カッコの対応がおかしい。
サブシェルに入れる理由がないわけじゃないが、これで処理終了なら遅くなるだけ
この程度でbash依存するのは無駄。長くなってるだけ
サブシェルに入れる理由がないわけじゃないが、これで処理終了なら遅くなるだけ
この程度でbash依存するのは無駄。長くなってるだけ
685デフォルトの名無しさん
2019/08/08(木) 19:11:29.10ID:l7k6B2kQ >>683
じゃあbash 2.05aとそれ以前でエラーになると言っておこう
じゃあbash 2.05aとそれ以前でエラーになると言っておこう
686デフォルトの名無しさん
2019/08/08(木) 19:14:12.37ID:l7k6B2kQ ${l}${l:+,} は俺もよく使うが、ループで毎回比較処理をすることになるし、
最後に末尾処理をしたほうが、速いんじゃないかなーって
常々思ってしまう。lが二回出てくるから1行が長くなることが多いし
最後に末尾処理をしたほうが、速いんじゃないかなーって
常々思ってしまう。lが二回出てくるから1行が長くなることが多いし
687デフォルトの名無しさん
2019/08/08(木) 19:53:16.22ID:l7k6B2kQ 試してみたけどやっぱりだ。最後に末尾処理するほうが速い。
dashやkshだと2倍ぐらい差が出る。
bashやzshはこういう処理が何故か遅くて差もあまり出ないけど
dashやkshだと2倍ぐらい差が出る。
bashやzshはこういう処理が何故か遅くて差もあまり出ないけど
688デフォルトの名無しさん
2019/08/08(木) 22:21:10.86ID:HFY26hHh へんなこだわりだな
689デフォルトの名無しさん
2019/08/08(木) 22:27:17.98ID:/tBUMiMq Ruby では、Array#join で自動的に、最後の区切り文字を削除してくれる
ary = [ "a", "b" ]
p ary.join( "," )
#=> "a,b"
ary = [ "a", "b" ]
p ary.join( "," )
#=> "a,b"
690デフォルトの名無しさん
2019/08/08(木) 22:40:09.53ID:X/CTiqlR そりゃそうだ joinは配列から文字列に変換するときに
間の糊付けをしてくれるのだから
間の糊付けをしてくれるのだから
691デフォルトの名無しさん
2019/08/08(木) 23:05:36.97ID:PTwvjoI/ 単純な join でセパレータが一文字なら定番の
$ (IFS=,; echo "$*")
で良いのだろうけど
$ (IFS=,; echo "$*")
で良いのだろうけど
692デフォルトの名無しさん
2019/08/09(金) 01:09:56.64ID:err5h/zJ 無自覚なバカってほんと厄介だな
693デフォルトの名無しさん
2019/08/09(金) 01:22:55.05ID:sB3SWfXZ694デフォルトの名無しさん
2019/08/09(金) 01:27:47.18ID:sB3SWfXZ >>691で
> 単純な join でセパレータが一文字なら
という話が出たので、問題。
今回は a b c を xaz,xbz,xcz にしたいから IFS=, を使わなかったわけだが
それでもIFS=,を使うならばどうすればよいだろうか?
言い換えると、引き数 a b c を xaz xbz xcz にすればいいわけだが、
さてどうすればよいだろうか?
> 単純な join でセパレータが一文字なら
という話が出たので、問題。
今回は a b c を xaz,xbz,xcz にしたいから IFS=, を使わなかったわけだが
それでもIFS=,を使うならばどうすればよいだろうか?
言い換えると、引き数 a b c を xaz xbz xcz にすればいいわけだが、
さてどうすればよいだろうか?
695デフォルトの名無しさん
2019/08/09(金) 02:31:44.47ID:oVYwNj0v そんな面倒なことをシェルスクリプトでやるのはやめる
客が7&いじゃなければ大丈夫だろ
客が7&いじゃなければ大丈夫だろ
696デフォルトの名無しさん
2019/08/09(金) 02:45:58.64ID:err5h/zJ 日本語崩壊してて草
697デフォルトの名無しさん
2019/08/09(金) 03:00:09.73ID:tip6m9df >>667
$ var=$(printf "x${1}z";shift;(($#)) && printf ',%sz' "${@/#/x}")
$ var=$(printf "x${1}z";shift;(($#)) && printf ',%sz' "${@/#/x}")
698デフォルトの名無しさん
2019/08/09(金) 03:18:20.23ID:tip6m9df >>694
$ (set -- "${@/#/x}";set -- "${@/%/z}";IFS=,;echo "$*")
$ (set -- "${@/#/x}";set -- "${@/%/z}";IFS=,;echo "$*")
699デフォルトの名無しさん
2019/08/09(金) 03:22:06.84ID:sB3SWfXZ >>697
とっても無理矢理感があるなw
まず引き数がないときに、xzと表示されるバグが有る。
あと後半意味がわからんw
単純に && printf ',x%sz' "$@" でいいんでないの?
(($#))もいらんし
とっても無理矢理感があるなw
まず引き数がないときに、xzと表示されるバグが有る。
あと後半意味がわからんw
単純に && printf ',x%sz' "$@" でいいんでないの?
(($#))もいらんし
700デフォルトの名無しさん
2019/08/09(金) 03:25:55.01ID:sB3SWfXZ701デフォルトの名無しさん
2019/08/09(金) 03:43:31.73ID:tip6m9df >>699
shift 後の $# が 0 以上だと成功になってしまうので引数が1個の場合、
$ set -- a
$ var=$(printf "x${1}z";shift&&printf ',%sz' "${@/#/x}")
$ echo "$var"
xaz,z
となってしまう。
一応、引数は1個以上を想定して、2個以上なら (($#))&& は不要なんだけどね
引数なしでも処理するなら、もっと酷くなるw
var=$((($#))&&{ printf "x${1}z";shift;(($#))&&printf ',%sz' "${@/#/x}"; })
shift 後の $# が 0 以上だと成功になってしまうので引数が1個の場合、
$ set -- a
$ var=$(printf "x${1}z";shift&&printf ',%sz' "${@/#/x}")
$ echo "$var"
xaz,z
となってしまう。
一応、引数は1個以上を想定して、2個以上なら (($#))&& は不要なんだけどね
引数なしでも処理するなら、もっと酷くなるw
var=$((($#))&&{ printf "x${1}z";shift;(($#))&&printf ',%sz' "${@/#/x}"; })
702デフォルトの名無しさん
2019/08/09(金) 03:46:25.07ID:tip6m9df おっと、
var=$((($#))&&{ printf "x${1}z";shift;(($#))&&printf ',x%sz' "$@"; })
だね
var=$((($#))&&{ printf "x${1}z";shift;(($#))&&printf ',x%sz' "$@"; })
だね
703デフォルトの名無しさん
2019/08/09(金) 03:55:40.01ID:sB3SWfXZ ああprintfは引き数がない場合でも表示されるのか
704デフォルトの名無しさん
2019/08/09(金) 04:24:13.39ID:err5h/zJ >>673
仮に別人だとしても同じようなことしてるぞ。
自分で模索しろとか言って解法を提示していないにもかかわらず
ある程度要求を満たす解法が上がった瞬間それにケチ付けはじめてるじゃん。
もしもほんとうに「自分で模索しろ」って思ってんなら黙っときゃいい話。
わざわざ人が答えを述べてからそれに乗っかるなんてマネする必要ない。
仮に別人だとしても同じようなことしてるぞ。
自分で模索しろとか言って解法を提示していないにもかかわらず
ある程度要求を満たす解法が上がった瞬間それにケチ付けはじめてるじゃん。
もしもほんとうに「自分で模索しろ」って思ってんなら黙っときゃいい話。
わざわざ人が答えを述べてからそれに乗っかるなんてマネする必要ない。
705デフォルトの名無しさん
2019/08/09(金) 04:28:32.89ID:err5h/zJ >>700
このコマンドラインをPOSIXに準じたものにするには
(愚直に言えば)単に${VAR/aaa/bbb}をprintf '%s' "$VAR" | sed -e 's/aaa/bbb/'
に変えればいいだけでは?
それかPOSIXの範疇で変数の置換展開を実現する方法を訊いているのか?
それじゃあ多分無理だ。
このコマンドラインをPOSIXに準じたものにするには
(愚直に言えば)単に${VAR/aaa/bbb}をprintf '%s' "$VAR" | sed -e 's/aaa/bbb/'
に変えればいいだけでは?
それかPOSIXの範疇で変数の置換展開を実現する方法を訊いているのか?
それじゃあ多分無理だ。
706デフォルトの名無しさん
2019/08/09(金) 04:30:09.25ID:err5h/zJ まあ尤もprintf sedなんていちいち呼び出すなんてバカなマネは普通しないが。
707デフォルトの名無しさん
2019/08/09(金) 04:35:02.69ID:sB3SWfXZ708デフォルトの名無しさん
2019/08/09(金) 04:36:42.97ID:sB3SWfXZ このテクニックはいろいろと応用が効くのだ!キリッ!
709デフォルトの名無しさん
2019/08/09(金) 04:39:32.46ID:yPcnAt2h shiftを上手く使えば
N番目以降の引数だけ別の処理に使うことってできるよね?
あとbashの引数って10超えるとおかしくなるってマジ?
N番目以降の引数だけ別の処理に使うことってできるよね?
あとbashの引数って10超えるとおかしくなるってマジ?
710デフォルトの名無しさん
2019/08/09(金) 04:40:03.48ID:yPcnAt2h 10超えると→10個以上引数持たせると
711デフォルトの名無しさん
2019/08/09(金) 04:40:29.97ID:sB3SWfXZ712デフォルトの名無しさん
2019/08/09(金) 04:44:59.16ID:sB3SWfXZ 引数をうまく扱うにはshift、
引数を高度に扱うにはevalを使う
引数を高度に扱うにはevalを使う
713デフォルトの名無しさん
2019/08/09(金) 05:33:56.10ID:err5h/zJ714デフォルトの名無しさん
2019/08/09(金) 16:11:09.79ID:R8nkiB91 awkとか使ってtsvを別のtsvに挿入させる方法ってある?
hoge.tsv
a b e
1 2 5
huga.tsv
c d
3 4
↓
hoge_huga.tsv
a b c d e
1 2 3 4 5
みたいな
hoge.tsv
a b e
1 2 5
huga.tsv
c d
3 4
↓
hoge_huga.tsv
a b c d e
1 2 3 4 5
みたいな
715デフォルトの名無しさん
2019/08/09(金) 17:22:23.99ID:tip6m9df 行と列をひっくり返す transpose っていう awk script を作って、
========
#!/usr/bin/awk -f
{for(i=1;i<=NF;i++) a[NR,i]=$i}
END{
for(j=1;j<=NF;j++) {
str=a[1,j]
for(i=2;i<=NR;i++) str=str" "a[i,j]
print str
}
}
========
$ paste hoge.tsv huga.tsv | ./transpose | sort -k1,1 | ./transpose
a b c d e
1 2 3 4 5
========
#!/usr/bin/awk -f
{for(i=1;i<=NF;i++) a[NR,i]=$i}
END{
for(j=1;j<=NF;j++) {
str=a[1,j]
for(i=2;i<=NR;i++) str=str" "a[i,j]
print str
}
}
========
$ paste hoge.tsv huga.tsv | ./transpose | sort -k1,1 | ./transpose
a b c d e
1 2 3 4 5
716デフォルトの名無しさん
2019/08/09(金) 17:43:24.97ID:UutwPLbs717デフォルトの名無しさん
2019/08/09(金) 18:18:03.48ID:err5h/zJ >>715
こっちのやりかたのほうが汎用的だし個人的には好きかな。
こっちのやりかたのほうが汎用的だし個人的には好きかな。
718デフォルトの名無しさん
2019/08/09(金) 18:25:29.43ID:UutwPLbs (´-`).。oO(列の挿入なのに何故ソートするんだろう)
719デフォルトの名無しさん
2019/08/09(金) 18:26:02.71ID:X5pM/Zqg >>716
awkのところcutでやろうとして失敗してる質問stackoverflowにたくさんあるね。
何度も提案されたが全部リジェクトされたんだとか。
https://stackoverflow.com/questions/1037171/forcing-the-order-of-output-fields-from-cut-command/#answer-1037260
awkのところcutでやろうとして失敗してる質問stackoverflowにたくさんあるね。
何度も提案されたが全部リジェクトされたんだとか。
https://stackoverflow.com/questions/1037171/forcing-the-order-of-output-fields-from-cut-command/#answer-1037260
720デフォルトの名無しさん
2019/08/09(金) 18:42:56.05ID:xLAwVgGE む。出遅れたか。気づいていたんだが書き込む時間がなかった。
>>716 と近いが、tsvなら入力をタブ文字にしたほうが良いだろう
でないとスペースまで区切りとして扱われる
paste hoge.tsv huga.tsv | awk -F"\t" -v OFS="\t" '{print $1,$2,$4,$5,$3}'
>>716 と近いが、tsvなら入力をタブ文字にしたほうが良いだろう
でないとスペースまで区切りとして扱われる
paste hoge.tsv huga.tsv | awk -F"\t" -v OFS="\t" '{print $1,$2,$4,$5,$3}'
721デフォルトの名無しさん
2019/08/09(金) 18:45:10.20ID:xLAwVgGE722デフォルトの名無しさん
2019/08/09(金) 18:48:55.70ID:xLAwVgGE >>713
その答えもありだが、それはそれとして
引き数の a b c を xaz xbz xcz にするPOSIX準拠のテクニックって
あまり知られてないのか?
まさかこんなに出ないとは思わなかった。
その答えもありだが、それはそれとして
引き数の a b c を xaz xbz xcz にするPOSIX準拠のテクニックって
あまり知られてないのか?
まさかこんなに出ないとは思わなかった。
723デフォルトの名無しさん
2019/08/09(金) 19:01:27.20ID:xLAwVgGE 同時に二つのファイルを開くやり方も分かったことだし、
ついでにシェルスクリプトだけで実現するやり方を書いておこう
#!/bin/sh
exec 3<./hoge.tsv
exec 4<./huga.tsv
IFS=$(printf '\t')
until
eof=1
read -r col1 col2 col3 <&3 && eof=''
read -r col4 col5 <&4 && eof=''
[ "$eof" ]
do
set -- "$col1" "$col2" "$col4" "$col5" "$col3"
echo "$*"
done
ついでにシェルスクリプトだけで実現するやり方を書いておこう
#!/bin/sh
exec 3<./hoge.tsv
exec 4<./huga.tsv
IFS=$(printf '\t')
until
eof=1
read -r col1 col2 col3 <&3 && eof=''
read -r col4 col5 <&4 && eof=''
[ "$eof" ]
do
set -- "$col1" "$col2" "$col4" "$col5" "$col3"
echo "$*"
done
724デフォルトの名無しさん
2019/08/09(金) 19:03:15.21ID:R8nkiB91725デフォルトの名無しさん
2019/08/09(金) 19:04:32.76ID:xLAwVgGE >>724
また、てめぇぇぇぇか!
また、てめぇぇぇぇか!
726デフォルトの名無しさん
2019/08/09(金) 19:10:00.87ID:X5pM/Zqg GNU datamashってのがあんだね。
$ paste hoge.tsv huga.tsv | datamash transpose | sort | datamash transpose
とか。挿入じゃなくてソートだけど。
$ paste hoge.tsv huga.tsv | datamash transpose | sort | datamash transpose
とか。挿入じゃなくてソートだけど。
727デフォルトの名無しさん
2019/08/09(金) 19:14:10.02ID:tip6m9df ソートしたのは >>714 で hoge.tsv と huga.tsv の一行目の項目が辞書順に
並ぶ様に挿入する、って思ったんだよね
並ぶ様に挿入する、って思ったんだよね
728デフォルトの名無しさん
2019/08/09(金) 19:21:09.66ID:UutwPLbs >>720
FSのデフォルトはスペースとタブだから指定する必要ないよ
FSのデフォルトはスペースとタブだから指定する必要ないよ
729デフォルトの名無しさん
2019/08/09(金) 19:21:36.74ID:err5h/zJ なんかこのスレに書き込む質問者ってお客は神様だみたいな発想してる人多い印象がある。
多少の問題は自力で解決しろよって思うわ。
「その例"だけ"に〜」とか喚いてるけど,その「例」とやらがマズい例なのでは?とは1ミリも考えてなさそう。
いつも自分が正しい。問題の責任は他人にある。
まあスレの全員がそうじゃないけどね。極一部。
多少の問題は自力で解決しろよって思うわ。
「その例"だけ"に〜」とか喚いてるけど,その「例」とやらがマズい例なのでは?とは1ミリも考えてなさそう。
いつも自分が正しい。問題の責任は他人にある。
まあスレの全員がそうじゃないけどね。極一部。
730デフォルトの名無しさん
2019/08/09(金) 19:21:58.99ID:UutwPLbs731デフォルトの名無しさん
2019/08/09(金) 19:22:34.09ID:xLAwVgGE >>728
アホか、スペースとタブだからタブだけにするんやろw
アホか、スペースとタブだからタブだけにするんやろw
732デフォルトの名無しさん
2019/08/09(金) 19:25:33.15ID:xLAwVgGE733デフォルトの名無しさん
2019/08/09(金) 19:27:56.83ID:UutwPLbs (´-`).。oO(勘違いしたって言ってるんだからもうええやん)
734デフォルトの名無しさん
2019/08/09(金) 19:28:06.46ID:xLAwVgGE735デフォルトの名無しさん
2019/08/09(金) 19:29:12.17ID:xLAwVgGE >>733
スレ更新してから書き込むまでに、34秒以上かかっただけだよw
スレ更新してから書き込むまでに、34秒以上かかっただけだよw
736デフォルトの名無しさん
2019/08/09(金) 19:33:01.55ID:OjVO+GBn 主気取り
737デフォルトの名無しさん
2019/08/09(金) 19:34:19.38ID:xLAwVgGE しゅ‐き【主気】
?名? そのものがいつも持っている運気。⇔客気(かっき)。〔夢渓筆談‐象数・一〕
?名? そのものがいつも持っている運気。⇔客気(かっき)。〔夢渓筆談‐象数・一〕
738デフォルトの名無しさん
2019/08/10(土) 00:01:07.05ID:L+B8OP2P はい、24:00締め切りでーす。
> 引き数 a b c を xaz xbz xcz にすればいいわけだが、
> さてどうすればよいだろうか?
解答
for i in "$@"; do
set -- "$@" "x${i}z"
shift
done
> 引き数 a b c を xaz xbz xcz にすればいいわけだが、
> さてどうすればよいだろうか?
解答
for i in "$@"; do
set -- "$@" "x${i}z"
shift
done
739デフォルトの名無しさん
2019/08/10(土) 00:04:08.85ID:L+B8OP2P 別解
for i in "$@"; do
set -- "$@" "x${i}z"
done
shift $(($# / 2))
for i in "$@"; do
set -- "$@" "x${i}z"
done
shift $(($# / 2))
740デフォルトの名無しさん
2019/08/10(土) 00:14:02.13ID:6d2gRK68 なんかシラケちゃったな
741デフォルトの名無しさん
2019/08/10(土) 00:14:33.81ID:L+B8OP2P 知らんがな
742デフォルトの名無しさん
2019/08/10(土) 01:26:32.09ID:lTTXvTcQ なんか対抗するつもりはないけど俺の回答のほうが何やってるか分かりやすい気がする…。
まあトリッキーなシェルスクリプトを書くのは個人の自由だけど
まあトリッキーなシェルスクリプトを書くのは個人の自由だけど
743デフォルトの名無しさん
2019/08/10(土) 01:56:14.18ID:L+B8OP2P >>742
こんなのトリッキーのうちに入らんでしょ。
シャルスクリプト特有の書き方ってだけ
POSIXの範囲ではシェルスクリプトで使える配列は
パラメータ引数しか無い。その貴重な配列を使いこなせば
bash依存もせずにすむよ
こんなのトリッキーのうちに入らんでしょ。
シャルスクリプト特有の書き方ってだけ
POSIXの範囲ではシェルスクリプトで使える配列は
パラメータ引数しか無い。その貴重な配列を使いこなせば
bash依存もせずにすむよ
744デフォルトの名無しさん
2019/08/10(土) 02:44:27.27ID:x6+Jkr/9 bashでいいじゃん
bash動かないようなクソ環境なんかないだろ今時
bash動かないようなクソ環境なんかないだろ今時
745デフォルトの名無しさん
2019/08/10(土) 02:48:00.53ID:6d2gRK68 POSIX原理主義者の彼にはそんな煽りは通用しない!
746デフォルトの名無しさん
2019/08/10(土) 02:51:21.01ID:L+B8OP2P そのとおり。Debianがdashを使ってるのだ。どうしようもない。
747デフォルトの名無しさん
2019/08/10(土) 02:52:20.68ID:L+B8OP2P あとAlpine Linuxとかな
748デフォルトの名無しさん
2019/08/10(土) 02:58:22.15ID:lTTXvTcQ >>743
うむ。トリッキーと書いたのは失敗だったな。
ちょっと勘違いを生んでしまった。
繰り返すけどあなたの解答を否定する気は全くないし,自分の解答が一番だなんて思ってないけど
引数「a b c d」を「xaz xbz xcz」に変換するにあたって
「手続き型言語としてのシェルスクリプト」を考えたときに
「引数に順次同じ変換を施して→余計なものを置換する」ほうが
「引数の仕様を利用してfor文を回す→(置き換えられた)引数として利用」
よりも単純かなぁと思っただけ。
あと(問題文に書いてないので推測するしかないが)引数自体はそのまま残したい場合もあるだろうから
引数を置き換えてしまう方法だと不本意な結果を招くかもしれないとも思った。
それこそ「引数を置き換えて新たな引数として利用したい」という要求ならばfor文とsetコマンドを使った方法が
いいんだろうけども。
ところで>>713がBash依存という話だけど
sed -e 's/ $/\
'
↑これってBashでしか使えなかったっけ? sedで何かから改行に置換する方法。
一応The Open Groupの仕様書には
A line can be split by substituting a <newline> into it.
The application shall escape the <newline> in the replacement by preceding it by a <backslash>.
と書かれてるんだけど。
うむ。トリッキーと書いたのは失敗だったな。
ちょっと勘違いを生んでしまった。
繰り返すけどあなたの解答を否定する気は全くないし,自分の解答が一番だなんて思ってないけど
引数「a b c d」を「xaz xbz xcz」に変換するにあたって
「手続き型言語としてのシェルスクリプト」を考えたときに
「引数に順次同じ変換を施して→余計なものを置換する」ほうが
「引数の仕様を利用してfor文を回す→(置き換えられた)引数として利用」
よりも単純かなぁと思っただけ。
あと(問題文に書いてないので推測するしかないが)引数自体はそのまま残したい場合もあるだろうから
引数を置き換えてしまう方法だと不本意な結果を招くかもしれないとも思った。
それこそ「引数を置き換えて新たな引数として利用したい」という要求ならばfor文とsetコマンドを使った方法が
いいんだろうけども。
ところで>>713がBash依存という話だけど
sed -e 's/ $/\
'
↑これってBashでしか使えなかったっけ? sedで何かから改行に置換する方法。
一応The Open Groupの仕様書には
A line can be split by substituting a <newline> into it.
The application shall escape the <newline> in the replacement by preceding it by a <backslash>.
と書かれてるんだけど。
749デフォルトの名無しさん
2019/08/10(土) 03:00:17.60ID:L+B8OP2P bash依存っていうのは ${test[@]} とか printf ',%sz' "${@/#/x}" のことな
750デフォルトの名無しさん
2019/08/10(土) 03:03:44.77ID:L+B8OP2P751デフォルトの名無しさん
2019/08/10(土) 03:10:55.16ID:lTTXvTcQ >>750
うん?
$ cat ./test.sh
#!/bin/sh
printf 'x%sz ' "$@" | sed -e 's/ $/\
/'
$ ./test.sh a b c
xaz xbz xcz
となって要求を満してそうなんだけども,違うのかな?
うん?
$ cat ./test.sh
#!/bin/sh
printf 'x%sz ' "$@" | sed -e 's/ $/\
/'
$ ./test.sh a b c
xaz xbz xcz
となって要求を満してそうなんだけども,違うのかな?
752デフォルトの名無しさん
2019/08/10(土) 03:11:46.31ID:L+B8OP2P753デフォルトの名無しさん
2019/08/10(土) 03:12:41.50ID:L+B8OP2P はぁ、またわずかに書くのが遅れたw
754デフォルトの名無しさん
2019/08/10(土) 03:35:54.66ID:6d2gRK68 $@ の中身が printable character だけなら GNU awk の SUBSEP 変数と同じ
様に IFS に '\034'(File Separator) を指定して
[ $# -eq 0 ] && exit 0
IFS=$(printf '\034');set -- $(printf "x%sz${IFS}" "$@")
IFS=,;echo "$*"
とか
様に IFS に '\034'(File Separator) を指定して
[ $# -eq 0 ] && exit 0
IFS=$(printf '\034');set -- $(printf "x%sz${IFS}" "$@")
IFS=,;echo "$*"
とか
755デフォルトの名無しさん
2019/08/10(土) 03:42:31.75ID:L+B8OP2P それだと引数に、"a b" が入ってるときにうまく動かない
あと先手を打ってるつもりなら、これを読むように
https://en.wikipedia.org/wiki/ASCII#Printable_characters
あと先手を打ってるつもりなら、これを読むように
https://en.wikipedia.org/wiki/ASCII#Printable_characters
756デフォルトの名無しさん
2019/08/10(土) 03:43:06.24ID:L+B8OP2P 訂正
それだと "a b" のように引数にスペースが入ってるときにうまく動かない
それだと "a b" のように引数にスペースが入ってるときにうまく動かない
757デフォルトの名無しさん
2019/08/10(土) 03:46:54.60ID:L+B8OP2P 間違えたw
758デフォルトの名無しさん
2019/08/10(土) 03:50:33.54ID:6d2gRK68 set -- a "b c" d
IFS=$(printf '\034');set -- $(printf "x%sz${IFS}" "$@")
IFS=,;echo "$*"
とすると xaz,xb cz,xdz となるのだが、そういう事じゃなくて?
IFS=$(printf '\034');set -- $(printf "x%sz${IFS}" "$@")
IFS=,;echo "$*"
とすると xaz,xb cz,xdz となるのだが、そういう事じゃなくて?
759デフォルトの名無しさん
2019/08/10(土) 03:54:52.71ID:L+B8OP2P760デフォルトの名無しさん
2019/08/10(土) 03:57:09.38ID:leF4BPLu bash ならどれぐらい分かりやすく書ける?
761デフォルトの名無しさん
2019/08/10(土) 03:58:27.60ID:lTTXvTcQ ぽじっくすに拘ったりぜっしゅに拘ったり急がしやっちゃなw
762デフォルトの名無しさん
2019/08/10(土) 04:01:38.59ID:lTTXvTcQ763デフォルトの名無しさん
2019/08/10(土) 04:04:22.25ID:lTTXvTcQ764デフォルトの名無しさん
2019/08/10(土) 04:04:55.05ID:6d2gRK68765デフォルトの名無しさん
2019/08/10(土) 04:06:36.42ID:lTTXvTcQ >>752
訊きたいんだけど,
引数を完全に置き換えてしまうことについてはどう思ってる?
再掲するけど
> (問題文に書いてないので推測するしかないが)引数自体はそのまま残したい場合もあるだろうから
> 引数を置き換えてしまう方法だと不本意な結果を招くかもしれないとも思った。
引数自体を弄くる方法だとこういうことになるのでは……?
訊きたいんだけど,
引数を完全に置き換えてしまうことについてはどう思ってる?
再掲するけど
> (問題文に書いてないので推測するしかないが)引数自体はそのまま残したい場合もあるだろうから
> 引数を置き換えてしまう方法だと不本意な結果を招くかもしれないとも思った。
引数自体を弄くる方法だとこういうことになるのでは……?
766デフォルトの名無しさん
2019/08/10(土) 04:08:24.77ID:lTTXvTcQ767デフォルトの名無しさん
2019/08/10(土) 04:09:03.91ID:L+B8OP2P >>761
> ぽじっくすに拘ったりぜっしゅに拘ったり急がしやっちゃなw
何いってんの? POSIX互換シェルにこだわってるだけだよ。
POSIXもdashもzshもbashもワケてない
POSIX互換シェルという一つのこだわりw
> ぽじっくすに拘ったりぜっしゅに拘ったり急がしやっちゃなw
何いってんの? POSIX互換シェルにこだわってるだけだよ。
POSIXもdashもzshもbashもワケてない
POSIX互換シェルという一つのこだわりw
768デフォルトの名無しさん
2019/08/10(土) 04:11:01.54ID:L+B8OP2P769デフォルトの名無しさん
2019/08/10(土) 04:14:17.41ID:L+B8OP2P >>764
> POSIX 的には $# == 3 になるのが正しい動作なのかね?
めんどくさくて調べてないな。
でもzshだけではなく、今は使われてないだろう古いシェルや
とあるシェルの古いバージョンでは4で、後のバージョンでは3になってたりするから
おそらく $# == 3 が正しいのだろう。
だが、現実として動かないシェルがある
POSIX互換シェルに拘ってるといったが、正確にはPOSIX互換シェルと名乗っている
現実に存在するシェルに拘っているというべきか
> POSIX 的には $# == 3 になるのが正しい動作なのかね?
めんどくさくて調べてないな。
でもzshだけではなく、今は使われてないだろう古いシェルや
とあるシェルの古いバージョンでは4で、後のバージョンでは3になってたりするから
おそらく $# == 3 が正しいのだろう。
だが、現実として動かないシェルがある
POSIX互換シェルに拘ってるといったが、正確にはPOSIX互換シェルと名乗っている
現実に存在するシェルに拘っているというべきか
770デフォルトの名無しさん
2019/08/10(土) 04:14:54.05ID:L+B8OP2P771デフォルトの名無しさん
2019/08/10(土) 04:15:21.60ID:lTTXvTcQ ZshってPOSIX互換を謳ってたっけ?
少なくとも公式ページ[zsh.org]にはそんな記述は見当らんが…。
もしかしてemulate -R shをPOSIX準拠モードとかだと思ってる…?
少なくとも公式ページ[zsh.org]にはそんな記述は見当らんが…。
もしかしてemulate -R shをPOSIX準拠モードとかだと思ってる…?
772デフォルトの名無しさん
2019/08/10(土) 04:19:09.04ID:lTTXvTcQ773デフォルトの名無しさん
2019/08/10(土) 04:20:00.43ID:L+B8OP2P >>762
Solarisは10まで(POSIX互換ではない)Bourne Shellが
デフォルトシェルだってのがいただけない
Extended Supportが2021年までらしい。
まあ俺はPOSIXじゃないからという理由で切り捨てることにしてるが
Solarisは10まで(POSIX互換ではない)Bourne Shellが
デフォルトシェルだってのがいただけない
Extended Supportが2021年までらしい。
まあ俺はPOSIXじゃないからという理由で切り捨てることにしてるが
774デフォルトの名無しさん
2019/08/10(土) 04:20:29.77ID:lTTXvTcQ >>694
> 今回は a b c を xaz,xbz,xcz にしたいから IFS=, を使わなかったわけだが →分かる
> それでもIFS=,を使うならばどうすればよいだろうか?→そうだな,どうすればいいんだろう。
> 言い換えると、引き数 a b c を xaz xbz xcz にすればいいわけだが、→え?空白区切り?今IFS=,の話だよな??
> さてどうすればよいだろうか? →????
> 今回は a b c を xaz,xbz,xcz にしたいから IFS=, を使わなかったわけだが →分かる
> それでもIFS=,を使うならばどうすればよいだろうか?→そうだな,どうすればいいんだろう。
> 言い換えると、引き数 a b c を xaz xbz xcz にすればいいわけだが、→え?空白区切り?今IFS=,の話だよな??
> さてどうすればよいだろうか? →????
775デフォルトの名無しさん
2019/08/10(土) 04:23:34.50ID:L+B8OP2P776デフォルトの名無しさん
2019/08/10(土) 04:26:01.61ID:L+B8OP2P >>774
お前プログラマに向いてないよw
推論能力が圧倒的に不足してる
引数が、xaz xbz xcz の状態なら、IFS使って xaz,xbz,xcz にできるだろw
って言っても理解できないんだろうなw
お前プログラマに向いてないよw
推論能力が圧倒的に不足してる
引数が、xaz xbz xcz の状態なら、IFS使って xaz,xbz,xcz にできるだろw
って言っても理解できないんだろうなw
777デフォルトの名無しさん
2019/08/10(土) 04:28:59.25ID:YdwKfvKq いつものクイズくん
778デフォルトの名無しさん
2019/08/10(土) 04:29:01.72ID:L+B8OP2P779デフォルトの名無しさん
2019/08/10(土) 04:29:23.37ID:L+B8OP2P >>777
呼びました?(別に隠してない)
呼びました?(別に隠してない)
780デフォルトの名無しさん
2019/08/10(土) 04:35:32.28ID:6d2gRK68 >>778
Zsh is able to emulate POSIX shells, but its default mode is not POSIX compatible
なんて書いてあるから何か変数を設定しないとダメみたいだな
色々弄ってるけど $# が 3 にならんのぅ…ソースコード読むしかないかなw
Zsh is able to emulate POSIX shells, but its default mode is not POSIX compatible
なんて書いてあるから何か変数を設定しないとダメみたいだな
色々弄ってるけど $# が 3 にならんのぅ…ソースコード読むしかないかなw
781デフォルトの名無しさん
2019/08/10(土) 04:38:16.54ID:L+B8OP2P >>780
たぶんその挙動はバグで確定だと思うでw
たぶんその挙動はバグで確定だと思うでw
782デフォルトの名無しさん
2019/08/10(土) 04:41:34.35ID:L+B8OP2P >>768の質問には答えてくれないのかな?
set -uしてると引数が存在しない場合に動かない古いシェルはなにか?
set -uしてると引数が存在しない場合に動かない古いシェルはなにか?
783デフォルトの名無しさん
2019/08/10(土) 04:42:42.71ID:lTTXvTcQ784デフォルトの名無しさん
2019/08/10(土) 04:43:21.02ID:lTTXvTcQ785デフォルトの名無しさん
2019/08/10(土) 04:44:17.65ID:L+B8OP2P 別にイキってないが、イキってるように見えるのは
俺じゃなくて、お前の問題でしょう? 普通のことなのにお前にはそう見えてしまう。
俺じゃなくて、お前の問題でしょう? 普通のことなのにお前にはそう見えてしまう。
786デフォルトの名無しさん
2019/08/10(土) 04:45:41.26ID:L+B8OP2P787デフォルトの名無しさん
2019/08/10(土) 04:49:56.25ID:L+B8OP2P なんで>>765みたいな質問が来るのかを推測したが、
提示したコードはそれで「完成したコード」で
そのコードを修正した「応用」は存在しないとか思ってないか?
違うことをしたいならそれに応じて変えればよかろう?
提示したコードはそれで「完成したコード」で
そのコードを修正した「応用」は存在しないとか思ってないか?
違うことをしたいならそれに応じて変えればよかろう?
788デフォルトの名無しさん
2019/08/10(土) 04:50:45.96ID:lTTXvTcQ >>782
>>786で一応答えを頂いたので,>>768への回答をば。
https://www.in-ulm.de/~mascheck/various/bourne_args/
ここの
These shells behave the old way and need ${1+"$@"}:
に色々載ってるぜ
俺が知らないシェルもあって勉強になったわ。
>>786で一応答えを頂いたので,>>768への回答をば。
https://www.in-ulm.de/~mascheck/various/bourne_args/
ここの
These shells behave the old way and need ${1+"$@"}:
に色々載ってるぜ
俺が知らないシェルもあって勉強になったわ。
789デフォルトの名無しさん
2019/08/10(土) 04:57:52.03ID:lTTXvTcQ790デフォルトの名無しさん
2019/08/10(土) 05:00:56.32ID:L+B8OP2P >>788
それを探してきたかw
じゃあそこに書いてない情報を。
poshは<0.10(8年前)ということになってるが、未だ最新版(9ヶ月前)の0.13.2でも修正されていない
だから「古いシェル」は実は間違い
バグ報告はでてるんだがねぇ
posh: set -u prevents using empty argument list
Date: Wed, 3 May 2017 12:24:01 UTC
Found in version posh/0.12.6
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=861743
posh can not use "$@" together with set -u
Date: Wed, 14 Nov 2018 10:00:01 UTC
Found in version posh/0.13.2
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=913718
それを探してきたかw
じゃあそこに書いてない情報を。
poshは<0.10(8年前)ということになってるが、未だ最新版(9ヶ月前)の0.13.2でも修正されていない
だから「古いシェル」は実は間違い
バグ報告はでてるんだがねぇ
posh: set -u prevents using empty argument list
Date: Wed, 3 May 2017 12:24:01 UTC
Found in version posh/0.12.6
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=861743
posh can not use "$@" together with set -u
Date: Wed, 14 Nov 2018 10:00:01 UTC
Found in version posh/0.13.2
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=913718
791デフォルトの名無しさん
2019/08/10(土) 05:03:11.51ID:L+B8OP2P792デフォルトの名無しさん
2019/08/10(土) 05:19:53.11ID:YdwKfvKq793デフォルトの名無しさん
2019/08/10(土) 06:27:36.08ID:lTTXvTcQ >>790
うーん。
まあそうなのかもしれないが
poshを「無意識に」使ってしまう環境なんてあるのだろうか?
例えば#!/bin/shが/usr/bin/bashにリンクされてる環境であれば,
BashのPOSIX互換モード特有のバグには注意しなくてはいけないし,
/bin/shの実体が/usr/bin/bashになってる環境は多いので,
多くの利用者が「今 自分が使っている/bin/shが実はBashだ」と意識することなく
POSIX shで正しく動く筈のシェルスクリプトを走らせることがあると想定できる。
でもposhが既定で/bin/shにリンクされてたりする環境があるとは思えない…。
うーん。
まあそうなのかもしれないが
poshを「無意識に」使ってしまう環境なんてあるのだろうか?
例えば#!/bin/shが/usr/bin/bashにリンクされてる環境であれば,
BashのPOSIX互換モード特有のバグには注意しなくてはいけないし,
/bin/shの実体が/usr/bin/bashになってる環境は多いので,
多くの利用者が「今 自分が使っている/bin/shが実はBashだ」と意識することなく
POSIX shで正しく動く筈のシェルスクリプトを走らせることがあると想定できる。
でもposhが既定で/bin/shにリンクされてたりする環境があるとは思えない…。
794デフォルトの名無しさん
2019/08/10(土) 08:53:06.96ID:x0rFB4wI >>751
この書き方が分かりやすくて良いと思うんだけど何か問題あるの?
この書き方が分かりやすくて良いと思うんだけど何か問題あるの?
795デフォルトの名無しさん
2019/08/10(土) 09:44:59.99ID:L+B8OP2P >>794
その話はもう終わってる
その話はもう終わってる
796デフォルトの名無しさん
2019/08/10(土) 09:50:56.01ID:L+B8OP2P797デフォルトの名無しさん
2019/08/10(土) 09:52:55.77ID:lTTXvTcQ >>794
もう触れるな。
もう触れるな。
798デフォルトの名無しさん
2019/08/10(土) 09:55:34.95ID:L+B8OP2P >>796に対する返答は?
799デフォルトの名無しさん
2019/08/10(土) 10:06:01.28ID:x0rFB4wI 引数を置換するってだけで何をぐだぐだ言ってるんだかw
800デフォルトの名無しさん
2019/08/10(土) 10:15:01.29ID:L+B8OP2P だから>>751は「引数を置換する」コードになってないだろ?
801デフォルトの名無しさん
2019/08/10(土) 10:20:30.35ID:x0rFB4wI オリジナルの引数を置換するのはプログラマーの本能が止めろと言っているw
普通は置換したもの別の変数に入れて使うよな
普通は置換したもの別の変数に入れて使うよな
802デフォルトの名無しさん
2019/08/10(土) 10:31:58.19ID:L+B8OP2P >>801
そのルールを守りつつ、IFS=,でjoinするというテクニックを使って(必須です。カンマ区切りをするときに使用します)
引数 a b c (例です。引数の内容、個数は変わることがあります)から
xaz,xbz,xcz (例です。引数の前後にxとzをつけてカンマ区切りにするという意味です)
という出力を得るコードを書くところまでやるのが君の仕事。
それができれば一人前だ!
そのルールを守りつつ、IFS=,でjoinするというテクニックを使って(必須です。カンマ区切りをするときに使用します)
引数 a b c (例です。引数の内容、個数は変わることがあります)から
xaz,xbz,xcz (例です。引数の前後にxとzをつけてカンマ区切りにするという意味です)
という出力を得るコードを書くところまでやるのが君の仕事。
それができれば一人前だ!
803デフォルトの名無しさん
2019/08/10(土) 10:37:28.54ID:L+B8OP2P 「POSIX準拠で」をつけ忘れたなw
そこまで文脈読めてないやつじゃないだろうが
そこまで文脈読めてないやつじゃないだろうが
804デフォルトの名無しさん
2019/08/10(土) 10:43:31.28ID:x0rFB4wI マウントとらないと死んじゃう病気なのかw
805デフォルトの名無しさん
2019/08/10(土) 10:47:01.43ID:L+B8OP2P >>804
?
俺はシェルスクリプトではやらないが、
他の言語で引数を置換するのはやめろというのはわかるから
その理屈は間違いじゃないとして、じゃあそれをシェルスクリプトでやるには
どうすればいいだろうか?という新たな出題に変えただけだけど?
いや、できるでしょ?これ。
?
俺はシェルスクリプトではやらないが、
他の言語で引数を置換するのはやめろというのはわかるから
その理屈は間違いじゃないとして、じゃあそれをシェルスクリプトでやるには
どうすればいいだろうか?という新たな出題に変えただけだけど?
いや、できるでしょ?これ。
806デフォルトの名無しさん
2019/08/10(土) 10:48:10.57ID:L+B8OP2P もちろんトリッキーなコードになるだろうけど
(こういうのこそトリッキーというべきだろう)
(こういうのこそトリッキーというべきだろう)
807デフォルトの名無しさん
2019/08/10(土) 10:49:05.37ID:x0rFB4wI808デフォルトの名無しさん
2019/08/10(土) 10:49:46.44ID:L+B8OP2P809デフォルトの名無しさん
2019/08/10(土) 10:51:11.39ID:x0rFB4wI810デフォルトの名無しさん
2019/08/10(土) 10:51:49.42ID:L+B8OP2P811デフォルトの名無しさん
2019/08/10(土) 10:52:52.04ID:L+B8OP2P812デフォルトの名無しさん
2019/08/10(土) 10:54:58.72ID:L+B8OP2P813デフォルトの名無しさん
2019/08/10(土) 10:58:02.57ID:x0rFB4wI やりたいことができればそれでいいじゃん
814デフォルトの名無しさん
2019/08/10(土) 11:22:44.90ID:L+B8OP2P815デフォルトの名無しさん
2019/08/10(土) 11:44:27.56ID:x0rFB4wI 手段が目的化する典型的な例だな
そんな縛りプレイに付き合う気になれんな
で、後からコード出して
こんなのも分からんのか?大したことねえな
ってやりたいんだろ?
それはな、
その問題がつまらないから誰もやらないんだよw
そんな縛りプレイに付き合う気になれんな
で、後からコード出して
こんなのも分からんのか?大したことねえな
ってやりたいんだろ?
それはな、
その問題がつまらないから誰もやらないんだよw
816デフォルトの名無しさん
2019/08/10(土) 12:08:44.58ID:Du6eKhDT817デフォルトの名無しさん
2019/08/10(土) 12:09:45.60ID:Du6eKhDT あ,ごめん。ID変わってるけど>>797とかです。
818デフォルトの名無しさん
2019/08/10(土) 12:22:13.64ID:L+B8OP2P >>816
あんたはposhが使われる環境があるとは思えないが
古いシェルが使われる環境はあると思ってset -uの話をしたってこと?
> bash-4.0.0 ... -4.0.27
> dash-0.4.6 ... -0.4.18
> all ksh88
> ksh93 until release t+20090501
> pdksh-5.1.3, -5.2.14
> mksh before R39 (as pdksh descendant)
> posh < 0.10 (as pdksh descendant)
> NetBSD 2 ff. /bin/sh
> all traditional Bourne shells
bash 4.0といえば2009年だね。10年近く前のシェルで動かないからって何?
そんなシェルのことまで考えろって言いたかったの?
あんたはposhが使われる環境があるとは思えないが
古いシェルが使われる環境はあると思ってset -uの話をしたってこと?
> bash-4.0.0 ... -4.0.27
> dash-0.4.6 ... -0.4.18
> all ksh88
> ksh93 until release t+20090501
> pdksh-5.1.3, -5.2.14
> mksh before R39 (as pdksh descendant)
> posh < 0.10 (as pdksh descendant)
> NetBSD 2 ff. /bin/sh
> all traditional Bourne shells
bash 4.0といえば2009年だね。10年近く前のシェルで動かないからって何?
そんなシェルのことまで考えろって言いたかったの?
819デフォルトの名無しさん
2019/08/10(土) 12:23:33.86ID:L+B8OP2P >>815
俺に出されるのが嫌なら、お前が先に出せばいいやんw
俺に出されるのが嫌なら、お前が先に出せばいいやんw
820デフォルトの名無しさん
2019/08/10(土) 12:31:02.29ID:x0rFB4wI821デフォルトの名無しさん
2019/08/10(土) 12:37:04.59ID:L+B8OP2P822デフォルトの名無しさん
2019/08/10(土) 12:42:22.81ID:x0rFB4wI823デフォルトの名無しさん
2019/08/10(土) 12:43:50.43ID:L+B8OP2P 足りないなら足りない部分を指摘するべき。
自分で勘違いしておいて、後から足りなかったんだっていうなよw
自分で勘違いしておいて、後から足りなかったんだっていうなよw
824デフォルトの名無しさん
2019/08/10(土) 12:46:05.58ID:x0rFB4wI 誤解されたくないならちゃんとした日本語書けや
825デフォルトの名無しさん
2019/08/10(土) 12:48:05.67ID:x0rFB4wI まあどっちでも同じことだけどなw
826デフォルトの名無しさん
2019/08/10(土) 13:00:05.30ID:6d2gRK68 お前らいつ寝てるん?
827デフォルトの名無しさん
2019/08/10(土) 13:04:34.25ID:C/8mgJdF プロのグラマーなら半球睡眠はコモンスキル
828デフォルトの名無しさん
2019/08/10(土) 13:35:44.59ID:lTTXvTcQ >>826
???「24時間働けますか?」
???「24時間働けますか?」
829デフォルトの名無しさん
2019/08/10(土) 13:37:08.94ID:lTTXvTcQ830デフォルトの名無しさん
2019/08/10(土) 13:40:51.55ID:4go3Z6Df OSXのデフォルトシェルがBash3だったはずと思ったら、最新のOSXだとZshになってるんだな
ま、LTSの古いOSとか、BSD系だとBash4じゃないのも結構あってまだ動いてると思う
ま、LTSの古いOSとか、BSD系だとBash4じゃないのも結構あってまだ動いてると思う
831デフォルトの名無しさん
2019/08/10(土) 14:00:29.15ID:8bQWJq+q 実務だとプログラミングって才能とかよりどれだけ知識を蓄えてるかの方が重要だよね?
このスレに居る猛者はどうやって強くなったんすか
このスレに居る猛者はどうやって強くなったんすか
832デフォルトの名無しさん
2019/08/10(土) 14:31:51.55ID:/e4xqllv 才能のないのはまず脱落する。
体力のないのもすぐ脱落する。
あとは下積みあるのみ。
体力のないのもすぐ脱落する。
あとは下積みあるのみ。
833デフォルトの名無しさん
2019/08/10(土) 14:39:24.77ID:lTTXvTcQ シェルスクリプトの才能ってなに?
驕り高ぶらないこと?w
↑半分本気
驕り高ぶらないこと?w
↑半分本気
834デフォルトの名無しさん
2019/08/10(土) 14:42:35.88ID:PeAU5cUa シェルスクリプトって5行以内で使うルールで使ってるけど
引数をたくさん使いたいっていう有用なケースってある?
引数をたくさん使いたいっていう有用なケースってある?
835デフォルトの名無しさん
2019/08/10(土) 16:16:23.61ID:L+B8OP2P836デフォルトの名無しさん
2019/08/10(土) 16:17:39.49ID:L+B8OP2P >>834
引数に * を使いたいときw
引数に * を使いたいときw
837デフォルトの名無しさん
2019/08/10(土) 16:22:27.62ID:L+B8OP2P838デフォルトの名無しさん
2019/08/10(土) 16:56:21.94ID:62yvq4d3 多くの環境で動くための何を作っているのかね
839デフォルトの名無しさん
2019/08/10(土) 17:00:18.98ID:lTTXvTcQ 草
840デフォルトの名無しさん
2019/08/10(土) 17:01:40.37ID:tdOS9ehT841デフォルトの名無しさん
2019/08/10(土) 17:04:52.26ID:4go3Z6Df クロスプラットフォーム必要なケースで、シェルスクリプトで作り込んだりしないよ
PerlかPythonか、Windowsも対応するならGoとか使う
PerlかPythonか、Windowsも対応するならGoとか使う
842デフォルトの名無しさん
2019/08/10(土) 17:10:57.28ID:L+B8OP2P843デフォルトの名無しさん
2019/08/10(土) 17:14:02.55ID:L+B8OP2P >>841
例えば組み込み機器でPerlやPythonも入ってない、入れられないときはどうする?
シェルスクリプトはかろうじて使える(最初から入ってるから)
Goはバイナリがでかいから、空き容量も制限されてる組み込み機器には入れたくない
今はIoT時代ですよ(笑)
例えば組み込み機器でPerlやPythonも入ってない、入れられないときはどうする?
シェルスクリプトはかろうじて使える(最初から入ってるから)
Goはバイナリがでかいから、空き容量も制限されてる組み込み機器には入れたくない
今はIoT時代ですよ(笑)
844デフォルトの名無しさん
2019/08/10(土) 17:24:27.35ID:leF4BPLu845デフォルトの名無しさん
2019/08/10(土) 17:35:44.47ID:L+B8OP2P >>844
組み込みLinux用に作られたBusyBoxっていうのがあって、
一つのバイナリに様々な外部コマンド(catとかsedとかwcとか)が詰め込まれてる。
そのBusyboxにashも組み込まれてる。
ただし様々な外部コマンドが組み込まれてるといっても、POSIX完全準拠を
目指しているわけじゃなくて、容量節約のためあまり使われないオプションを実装していない。
それでもシェル(ash)はPOSIX準拠になってる。
BSDなどでもそうなんだが外部コマンドはオプションが違うことがある。
オプションの違いでLinuxで動いたものがMacで動かなかったりするが
シェルスクリプトで実装していればそういうこともない。
組み込みLinux用に作られたBusyBoxっていうのがあって、
一つのバイナリに様々な外部コマンド(catとかsedとかwcとか)が詰め込まれてる。
そのBusyboxにashも組み込まれてる。
ただし様々な外部コマンドが組み込まれてるといっても、POSIX完全準拠を
目指しているわけじゃなくて、容量節約のためあまり使われないオプションを実装していない。
それでもシェル(ash)はPOSIX準拠になってる。
BSDなどでもそうなんだが外部コマンドはオプションが違うことがある。
オプションの違いでLinuxで動いたものがMacで動かなかったりするが
シェルスクリプトで実装していればそういうこともない。
846デフォルトの名無しさん
2019/08/10(土) 17:37:10.25ID:L+B8OP2P (Busyboxは組み込み用ではあるが、組み込みLinux用とは限らんかw)
847デフォルトの名無しさん
2019/08/10(土) 17:46:25.47ID:6d2gRK68 (´-`).。oO(IoT機器で文字列くっつけたりTSVファイルを混ぜたりしているのか…
848デフォルトの名無しさん
2019/08/10(土) 17:53:19.49ID:L+B8OP2P そりゃすることもあるだろw
IoTはモノのインターネットの略なんだから
インターネットにあるものと連携してるよ。
TSVやCSVだけじゃなくJSONやXMLやYAMLも扱いたい
(簡易なことならsedなどで対応できるが)
IoTはモノのインターネットの略なんだから
インターネットにあるものと連携してるよ。
TSVやCSVだけじゃなくJSONやXMLやYAMLも扱いたい
(簡易なことならsedなどで対応できるが)
849デフォルトの名無しさん
2019/08/10(土) 17:56:06.44ID:C/8mgJdF やっぱりどこでも動くシェルスクリプトなんて幻想なんだね…
850デフォルトの名無しさん
2019/08/10(土) 17:56:37.22ID:6d2gRK68 (´-`).。oO(心の声に反応しないで欲しい…w
851デフォルトの名無しさん
2019/08/10(土) 18:04:41.45ID:L+B8OP2P >>849
POSIX準拠でシェルスクリプトで書けば可能だって言ってんだろw
POSIX準拠でシェルスクリプトで書けば可能だって言ってんだろw
852デフォルトの名無しさん
2019/08/10(土) 18:30:59.43ID:SA5rOGgq 今現在でも世界中で書かれているシェルスクリプトの一体何%がPOSIX準拠なのか。
ま、実質幻想だね。
ま、実質幻想だね。
853デフォルトの名無しさん
2019/08/10(土) 18:31:19.35ID:4go3Z6Df まあ無理だね
854デフォルトの名無しさん
2019/08/10(土) 18:38:02.19ID:6d2gRK68 (´-`).。oO(心は常に幻想を追い求める…原理主義者の業の深さよ…
855デフォルトの名無しさん
2019/08/10(土) 19:05:33.96ID:blTYOOvx 具体性ゼロだな。単なる可能性想像上だけの話だな
多くは限られた環境しか使わんし、それで動けばいい、何か他で使うようなときに問題があったら考えようで十分だろな
使ってる環境(OS)にデフォで入っている汎用スクリプトもそのOSでしか動きませんというのもそんなもんだし
多くは限られた環境しか使わんし、それで動けばいい、何か他で使うようなときに問題があったら考えようで十分だろな
使ってる環境(OS)にデフォで入っている汎用スクリプトもそのOSでしか動きませんというのもそんなもんだし
856デフォルトの名無しさん
2019/08/10(土) 19:15:08.08ID:L+B8OP2P857デフォルトの名無しさん
2019/08/10(土) 19:24:04.14ID:gKKk3ZAT (´-`).。oO(いつからgitはPOSIXコマンドになったんだろう)
858デフォルトの名無しさん
2019/08/10(土) 19:26:31.61ID:6d2gRK68859デフォルトの名無しさん
2019/08/10(土) 19:29:59.92ID:L+B8OP2P 35.7%っていってるんだから、探すまでもなく他の使ってるってわかるだろw
860デフォルトの名無しさん
2019/08/10(土) 19:30:21.32ID:L+B8OP2P >>857
gitがPOSIXコマンドだって誰も言ってない
gitがPOSIXコマンドだって誰も言ってない
861デフォルトの名無しさん
2019/08/10(土) 19:34:35.69ID:6d2gRK68 少なくとも git-filter-branch.sh は perl がインストールされていない環境では
動作しない…それに、シェルスクリプトの表現能力が(他の言語に比べて相
対的に)低いために全体の占める割合が高くなってしまっているという可能性
も否定できない。別段それが悪いわけではないが。
動作しない…それに、シェルスクリプトの表現能力が(他の言語に比べて相
対的に)低いために全体の占める割合が高くなってしまっているという可能性
も否定できない。別段それが悪いわけではないが。
862デフォルトの名無しさん
2019/08/10(土) 19:49:03.72ID:lTTXvTcQ gitコマンドの話(しかも実装の話)を延々とされても困るわ
863デフォルトの名無しさん
2019/08/10(土) 19:51:14.48ID:L+B8OP2P そりゃ具体例があるという話をされると困るやろなw
864デフォルトの名無しさん
2019/08/10(土) 19:52:40.23ID:L+B8OP2P じゃあ続いての具体例、rbenv。Shellが96.5%
https://github.com/rbenv/rbenv
https://github.com/rbenv/rbenv
865デフォルトの名無しさん
2019/08/10(土) 19:56:39.76ID:6d2gRK68 shbang が全部 #!/usr/bin/env bash だな。個人的にはこの方がいいけどw
866デフォルトの名無しさん
2019/08/10(土) 19:58:18.27ID:gKKk3ZAT (´-`).。oO(gitを使うシェルスクリプトはPOSIX準拠じゃないだろ)
867デフォルトの名無しさん
2019/08/10(土) 19:59:11.41ID:L+B8OP2P gitを使うシェルスクリプトってなんのこと?
868デフォルトの名無しさん
2019/08/10(土) 20:01:14.55ID:gKKk3ZAT gitを呼び出すシェルスクリプト...
869デフォルトの名無しさん
2019/08/10(土) 20:03:00.81ID:N6maMe0S まさかと思ったが具体性のために git を出したのか。誰がそんなことを聞いているねん
ここにいるどんだけの人がそういう多くの人が使うのを書いているねん。今までのでもほとんど「私用」だろに
ここにいるどんだけの人がそういう多くの人が使うのを書いているねん。今までのでもほとんど「私用」だろに
870デフォルトの名無しさん
2019/08/10(土) 20:03:07.19ID:L+B8OP2P gitを呼び出すシェルスクリプトの話は誰もしてない
871デフォルトの名無しさん
2019/08/10(土) 20:04:38.53ID:L+B8OP2P872デフォルトの名無しさん
2019/08/10(土) 20:07:18.63ID:N6maMe0S 私用で限られた環境で動けばいいのならPOSIXにこだわる必要性はほぼゼロだな
そしてこのスレでの限られた人を除いては、あくまでも私用範囲といういたって普通の話だろう
だから、あなたがgitレベルの何を書いているのかね?そういう具体性。自分でそういうの書いていないのに?
そしてこのスレでの限られた人を除いては、あくまでも私用範囲といういたって普通の話だろう
だから、あなたがgitレベルの何を書いているのかね?そういう具体性。自分でそういうの書いていないのに?
873デフォルトの名無しさん
2019/08/10(土) 20:20:07.09ID:N6maMe0S >>865
結局彼は何を言いたいのかな?わけわからんなw
結局彼は何を言いたいのかな?わけわからんなw
874デフォルトの名無しさん
2019/08/10(土) 20:32:37.04ID:6d2gRK68 ワシもわけわからんw 具体例なら例の某POSIX原理主義者が書いた
ピュアシェルスクリプトの nkf 互換コマンドを出せばいいのに、って思う
ピュアシェルスクリプトの nkf 互換コマンドを出せばいいのに、って思う
875デフォルトの名無しさん
2019/08/10(土) 20:40:24.97ID:N6maMe0S それが nkf を置き換えるぐらいメジャーだったら出してたのかも
所詮お遊び趣味可能性を示しただけという認識なのかも
よく知らんけどそのスクリプトがどれだけ使われているのか
所詮お遊び趣味可能性を示しただけという認識なのかも
よく知らんけどそのスクリプトがどれだけ使われているのか
876デフォルトの名無しさん
2019/08/10(土) 20:40:54.36ID:x0rFB4wI 例えばさ、リモートでHW情報(CPU,メモリ,ディスク...)を取得したいとするじゃん
プラットフォームも様々Linux, FreeBSD, mac...
これPOSIX準拠で書けるかって話
実装はsshでログインしてproc見てってやるじゃん
sshはPOSIXコマンドじゃないし
procはLinuxとBSD系で構成が違うから判断が必要
POSIXで担保できる可搬性には限界があるってことだ
プラットフォームも様々Linux, FreeBSD, mac...
これPOSIX準拠で書けるかって話
実装はsshでログインしてproc見てってやるじゃん
sshはPOSIXコマンドじゃないし
procはLinuxとBSD系で構成が違うから判断が必要
POSIXで担保できる可搬性には限界があるってことだ
877デフォルトの名無しさん
2019/08/10(土) 20:44:39.21ID:6d2gRK68878デフォルトの名無しさん
2019/08/10(土) 20:45:40.10ID:N6maMe0S w
(そんなオチかよw)
(そんなオチかよw)
879デフォルトの名無しさん
2019/08/10(土) 20:49:13.37ID:lTTXvTcQ880デフォルトの名無しさん
2019/08/10(土) 21:19:03.25ID:L+B8OP2P881デフォルトの名無しさん
2019/08/10(土) 21:19:45.62ID:L+B8OP2P882デフォルトの名無しさん
2019/08/10(土) 21:23:38.65ID:6d2gRK68 >>880
いや、POSIXシェルの機能だけを使ってる。可搬性は高いが遅い。
いや、POSIXシェルの機能だけを使ってる。可搬性は高いが遅い。
883デフォルトの名無しさん
2019/08/10(土) 21:31:01.53ID:N6maMe0S いろんな環境で動くなにを書いているのだか...w
884デフォルトの名無しさん
2019/08/10(土) 21:33:10.93ID:L+B8OP2P >>883
思いつかない人のために、gitやrbenvという具体例をだしました。
思いつかない人のために、gitやrbenvという具体例をだしました。
885デフォルトの名無しさん
2019/08/10(土) 21:35:17.53ID:L+B8OP2P886デフォルトの名無しさん
2019/08/10(土) 21:35:31.35ID:eyby+BxV 意味わからん逃げだな
そんなに多くの人が使ってるようなの書いていたら言えるだろうに。具体的に
そんなに多くの人が使ってるようなの書いていたら言えるだろうに。具体的に
887デフォルトの名無しさん
2019/08/10(土) 21:39:50.03ID:L+B8OP2P >>886
もしかして俺が誰か特定したかったのか?
もしかして俺が誰か特定したかったのか?
888デフォルトの名無しさん
2019/08/10(土) 21:41:52.82ID:eyby+BxV なにを言っているのか意味わからん
いろんな環境で動くがほぼ絶対なんだろう?そのいろんな環境で動くなにを書いているんだよという素朴な疑問
多くはいろんな環境で動くのを想定してなんていなく、自分の使う環境でしかとしか思わないからな
いろんな環境で動くがほぼ絶対なんだろう?そのいろんな環境で動くなにを書いているんだよという素朴な疑問
多くはいろんな環境で動くのを想定してなんていなく、自分の使う環境でしかとしか思わないからな
889デフォルトの名無しさん
2019/08/10(土) 21:50:32.32ID:L+B8OP2P890デフォルトの名無しさん
2019/08/10(土) 21:52:52.92ID:L+B8OP2P 便利ツールは、俺が興味がある環境すべてで使う。
LinuxやBSDやmacOSや組み込み環境
Unixも興味あるがSorarisとMac以外は個人で使うのが難しいので残念
LinuxやBSDやmacOSや組み込み環境
Unixも興味あるがSorarisとMac以外は個人で使うのが難しいので残念
891デフォルトの名無しさん
2019/08/10(土) 21:52:57.75ID:eyby+BxV だったら、いろんな環境で動くがほぼ絶対はあんただけのことだな
892デフォルトの名無しさん
2019/08/10(土) 21:55:49.46ID:L+B8OP2P893デフォルトの名無しさん
2019/08/10(土) 21:56:20.44ID:lTTXvTcQ 被害妄想やばない?
894デフォルトの名無しさん
2019/08/10(土) 21:58:00.05ID:SA5rOGgq 問.今現在でも世界中で書かれているシェルスクリプトの一体何%がPOSIX準拠なのか
池沼の答え1.gitは35.7%がシェルスクリプトである。俺は問に答えた!
池沼の答え2.rbenvはShellが96.5%。これが具体例だ!
ぼく「・・・」
池沼の答え1.gitは35.7%がシェルスクリプトである。俺は問に答えた!
池沼の答え2.rbenvはShellが96.5%。これが具体例だ!
ぼく「・・・」
895デフォルトの名無しさん
2019/08/10(土) 21:59:30.89ID:eyby+BxV896デフォルトの名無しさん
2019/08/10(土) 22:01:46.59ID:L+B8OP2P897デフォルトの名無しさん
2019/08/10(土) 22:03:58.32ID:L+B8OP2P898デフォルトの名無しさん
2019/08/10(土) 22:04:32.77ID:eyby+BxV899デフォルトの名無しさん
2019/08/10(土) 22:12:33.18ID:L+B8OP2P900デフォルトの名無しさん
2019/08/10(土) 22:18:08.74ID:eyby+BxV 根本的に何も理解できないのな
マルチプラットフォームを意識するスクリプトも当然あるし、そうじゃない特定の環境で動けばいいスクリプトも当然ある
あんたは前者ひとつと言うからおかしい。具体的にって聞いたら個人的ツールってことなので、全然いろんな環境で動くがほぼ絶対ではないってことだよ
というか逆に特定の環境で動けばいいの方が多数を占めているのが現実だろう。なぜかは自分で>>890で言っているようなもん
POSIX大好きいろんな環境で動くスクリプト書くのが好きってだけだな
マルチプラットフォームを意識するスクリプトも当然あるし、そうじゃない特定の環境で動けばいいスクリプトも当然ある
あんたは前者ひとつと言うからおかしい。具体的にって聞いたら個人的ツールってことなので、全然いろんな環境で動くがほぼ絶対ではないってことだよ
というか逆に特定の環境で動けばいいの方が多数を占めているのが現実だろう。なぜかは自分で>>890で言っているようなもん
POSIX大好きいろんな環境で動くスクリプト書くのが好きってだけだな
901デフォルトの名無しさん
2019/08/10(土) 22:24:37.93ID:L+B8OP2P >>900
あのさぁ、俺はすべてのシェルスクリプトがPOSIX準拠するべきだなんて一言も言ってないんだが?
お前の思い込みだろ。俺がそう言ってるって。
俺は
POSIX準拠であれば、多くの環境で動く(事実)
俺が使ってる個人ツールは、多くの環境で動かしたい(事実)
俺の個人ツール以外でも、gitに含まれてるスクリプトやrbenvなど多くの環境で動かしたいものはある(事実)
としか言ってないの
あのさぁ、俺はすべてのシェルスクリプトがPOSIX準拠するべきだなんて一言も言ってないんだが?
お前の思い込みだろ。俺がそう言ってるって。
俺は
POSIX準拠であれば、多くの環境で動く(事実)
俺が使ってる個人ツールは、多くの環境で動かしたい(事実)
俺の個人ツール以外でも、gitに含まれてるスクリプトやrbenvなど多くの環境で動かしたいものはある(事実)
としか言ってないの
902デフォルトの名無しさん
2019/08/10(土) 22:27:45.82ID:L+B8OP2P 他にも俺が言ったことには、
外部コマンドはオプションが異なることがあるので、シェルスクリプトで実装すると、
その違いに振り回されなくてすむ
というのがあります。
外部コマンドはオプションが異なることがあるので、シェルスクリプトで実装すると、
その違いに振り回されなくてすむ
というのがあります。
903デフォルトの名無しさん
2019/08/10(土) 22:37:35.17ID:eyby+BxV904デフォルトの名無しさん
2019/08/10(土) 22:48:47.16ID:lTTXvTcQ だいたいPOSIXに従ってないシェルもあるんだから
POSIXで書いたからといってどこでも動くわけじゃないし。
なんというか,ベンダ依存を嫌うあまりPOSIXに「依存」してしまってる感がある。
POSIXで書いたからといってどこでも動くわけじゃないし。
なんというか,ベンダ依存を嫌うあまりPOSIXに「依存」してしまってる感がある。
905デフォルトの名無しさん
2019/08/10(土) 22:49:05.60ID:x0rFB4wI ここってPOSIXシェル以外の話題もおkなんだよな
なのに、それはbash依存とか外部コマンド使ったら遅いとか押しつけがましいやつがウザいんだよ
そんなもん好きに書かせろやって感じだわ
なのに、それはbash依存とか外部コマンド使ったら遅いとか押しつけがましいやつがウザいんだよ
そんなもん好きに書かせろやって感じだわ
906デフォルトの名無しさん
2019/08/10(土) 22:50:33.71ID:AU+T1mdi まったく言う通りでございますw
907デフォルトの名無しさん
2019/08/10(土) 22:56:44.56ID:L+B8OP2P > 最新のOSXだとZshになってるんだな
という話に続いて、他のOSではいろんなシェルが使われてるという話をすることに
なんの問題があるのかわからんが?
bashをインストールするのが大変な環境もあるんだし
POSIX準拠の範囲でできるなら、POSIX準拠でやればいいだろ。対して手間もかからんし。
逆にオプションの違いで動かんことに対応する方が手間なんだよ。
上の方でも出てたけど、sort -Vで動くウェーイってやってたらmacOSで動かんのだろ?
(ぐぐって確かに動かんというような記事ばかりだが、最新のmacOSだと対応してる気もするw)
という話に続いて、他のOSではいろんなシェルが使われてるという話をすることに
なんの問題があるのかわからんが?
bashをインストールするのが大変な環境もあるんだし
POSIX準拠の範囲でできるなら、POSIX準拠でやればいいだろ。対して手間もかからんし。
逆にオプションの違いで動かんことに対応する方が手間なんだよ。
上の方でも出てたけど、sort -Vで動くウェーイってやってたらmacOSで動かんのだろ?
(ぐぐって確かに動かんというような記事ばかりだが、最新のmacOSだと対応してる気もするw)
908デフォルトの名無しさん
2019/08/10(土) 22:58:46.81ID:AU+T1mdi 結局POSIXで書けって言ってるだろうに。ふらふらしてんなあ
909デフォルトの名無しさん
2019/08/10(土) 23:01:39.84ID:L+B8OP2P >>904
> だいたいPOSIXに従ってないシェルもあるんだから
> POSIXで書いたからといってどこでも動くわけじゃないし。
もっといい案があれば採用するが?
条件後出しするなって言われそうだから条件
組み込み機器など含めてソフトウェアを追加するのが困難なシステムでも動く
コンパイルはもとより、クロスコンパイル環境も不要
この条件でできるだけ多くの環境で同じように動く
> だいたいPOSIXに従ってないシェルもあるんだから
> POSIXで書いたからといってどこでも動くわけじゃないし。
もっといい案があれば採用するが?
条件後出しするなって言われそうだから条件
組み込み機器など含めてソフトウェアを追加するのが困難なシステムでも動く
コンパイルはもとより、クロスコンパイル環境も不要
この条件でできるだけ多くの環境で同じように動く
910デフォルトの名無しさん
2019/08/10(土) 23:02:36.58ID:L+B8OP2P >>908
どこをどう読めば、お前は命令されてるように感じるんだ?w
どこをどう読めば、お前は命令されてるように感じるんだ?w
911デフォルトの名無しさん
2019/08/10(土) 23:04:12.98ID:AU+T1mdi >POSIX準拠の範囲でできるなら、POSIX準拠でやればいいだろ。対して手間もかからんし。
誰に向けて書いているの?
誰に向けて書いているの?
912デフォルトの名無しさん
2019/08/10(土) 23:04:27.98ID:L+B8OP2P 補足
> この条件でできるだけ多くの環境で同じように動く
これは多くの"種類"の環境っていみな
世の中Windowsばかりだろという反論は筋違い
> この条件でできるだけ多くの環境で同じように動く
これは多くの"種類"の環境っていみな
世の中Windowsばかりだろという反論は筋違い
913デフォルトの名無しさん
2019/08/10(土) 23:05:05.76ID:L+B8OP2P >>911
する必要もないのに、bashに依存してる人
する必要もないのに、bashに依存してる人
914デフォルトの名無しさん
2019/08/10(土) 23:05:18.04ID:6d2gRK68 なんかシラケちゃったな
915デフォルトの名無しさん
2019/08/10(土) 23:05:34.13ID:AU+T1mdi それがだろうが。自分で何を書いているのかわかららないの?
916デフォルトの名無しさん
2019/08/10(土) 23:06:03.29ID:L+B8OP2P >>915
だからそれってなんだよw
だからそれってなんだよw
917デフォルトの名無しさん
2019/08/10(土) 23:06:21.63ID:AU+T1mdi 一貫性がないね。言質とられても逃げるだけだね
918デフォルトの名無しさん
2019/08/10(土) 23:06:45.91ID:L+B8OP2P ずっと同じこと言ってるだろw
919デフォルトの名無しさん
2019/08/10(土) 23:08:20.30ID:AU+T1mdi 別にbashに依存してもいいだろう?それでそのスクリプトの実行に問題がなければ
>俺はすべてのシェルスクリプトがPOSIX準拠するべきだなんて一言も言ってない
と相入れないね
>俺はすべてのシェルスクリプトがPOSIX準拠するべきだなんて一言も言ってない
と相入れないね
920デフォルトの名無しさん
2019/08/10(土) 23:09:10.56ID:L+B8OP2P 唐揚げにレモンをかけると美味しくなりますよって言ったら、
「俺にレモンをかけろと命令したな!ムキー」って怒るような
話が通じない人が多いw
「俺にレモンをかけろと命令したな!ムキー」って怒るような
話が通じない人が多いw
921デフォルトの名無しさん
2019/08/10(土) 23:10:11.18ID:AU+T1mdi わからんけど、複数が「?」と思ってるのだよ。よく考えような
922デフォルトの名無しさん
2019/08/10(土) 23:11:23.84ID:L+B8OP2P >>919
bashに依存してもいいだろ。というと
POSIXのすることのメリットは矛盾しないからねw
「bashに依存してもいいだろ」はお前の主観で、
POSIX準拠で作ることのメリットは客観的なもの
客観的事実に、主観で反論しないでください
bashに依存してもいいだろ。というと
POSIXのすることのメリットは矛盾しないからねw
「bashに依存してもいいだろ」はお前の主観で、
POSIX準拠で作ることのメリットは客観的なもの
客観的事実に、主観で反論しないでください
923デフォルトの名無しさん
2019/08/10(土) 23:11:53.50ID:L+B8OP2P >>921
そうだと良いね(笑)
そうだと良いね(笑)
924デフォルトの名無しさん
2019/08/10(土) 23:12:31.18ID:AU+T1mdi それもPOSIX好きな主観だとは気づかないのね
925デフォルトの名無しさん
2019/08/10(土) 23:13:23.36ID:L+B8OP2P926デフォルトの名無しさん
2019/08/10(土) 23:14:17.64ID:L+B8OP2P あと11レスで今日一日でこのスレの1/10を俺が占拠したことになる。
お前ら、レス頑張れ!
お前ら、レス頑張れ!
927デフォルトの名無しさん
2019/08/10(土) 23:14:26.20ID:AU+T1mdi 結局何を言いたいの?POSIXで書け、できるだけそう書けと言いたいの?
928デフォルトの名無しさん
2019/08/10(土) 23:15:52.78ID:L+B8OP2P929デフォルトの名無しさん
2019/08/10(土) 23:16:41.85ID:AU+T1mdi すべてのシェルスクリプトがPOSIX準拠するべきだ
との違いがわからんな
との違いがわからんな
930デフォルトの名無しさん
2019/08/10(土) 23:19:56.39ID:6d2gRK68 ∧∧ ミ _ ドスッ
( ,,)┌─┴┴─┐
/ つ. 終 了 │
〜′ /´ └─┬┬─┘
∪ ∪ ││ _ε3
゛゛'゛'゛
( ,,)┌─┴┴─┐
/ つ. 終 了 │
〜′ /´ └─┬┬─┘
∪ ∪ ││ _ε3
゛゛'゛'゛
931デフォルトの名無しさん
2019/08/10(土) 23:23:45.46ID:L+B8OP2P932デフォルトの名無しさん
2019/08/10(土) 23:27:18.24ID:AU+T1mdi ドライバがJavaで書けるなら書く人もいるだろう。そんなOSがあれば
不適切よくわからん例えだな
結局
すべてのシェルスクリプトがPOSIX準拠するべきだ
と言ってるのね。好きにしろではなくてPOSIXを強く勧める押し付けがましく
不適切よくわからん例えだな
結局
すべてのシェルスクリプトがPOSIX準拠するべきだ
と言ってるのね。好きにしろではなくてPOSIXを強く勧める押し付けがましく
933デフォルトの名無しさん
2019/08/10(土) 23:29:21.42ID:L+B8OP2P >>905
少なくとも5年前から
> □A. お約束
> 1. 特記なき場合は #!/bin/sh がデフォルトです。この場合可搬性に注意し、
> Traditional Bourne Shell もしくは、POSIX 相当のスクリプトでお願いします。
> bash / zsh / ksh / ash / dash や OS 等に依存する場合は、明示しましょう。
> 良く分からない方は、使用している OS を書いておけば OK です。是非ご参加下さい。
https://peace.5ch.net/test/read.cgi/unix/1415634843/
少なくとも5年前から
> □A. お約束
> 1. 特記なき場合は #!/bin/sh がデフォルトです。この場合可搬性に注意し、
> Traditional Bourne Shell もしくは、POSIX 相当のスクリプトでお願いします。
> bash / zsh / ksh / ash / dash や OS 等に依存する場合は、明示しましょう。
> 良く分からない方は、使用している OS を書いておけば OK です。是非ご参加下さい。
https://peace.5ch.net/test/read.cgi/unix/1415634843/
934デフォルトの名無しさん
2019/08/10(土) 23:30:20.34ID:L+B8OP2P935デフォルトの名無しさん
2019/08/10(土) 23:31:49.03ID:AU+T1mdi 自分だって否定されたらそうなってるように見えるけど?
936デフォルトの名無しさん
2019/08/10(土) 23:32:16.77ID:L+B8OP2P >>932
Javaで例えれば冷静になって、
> ドライバがJavaで書けるなら書く人もいるだろう。
っていうわけだよね
でも、POSIXで書けばいろんなOSで動きますって言うと、頭に血が上って
> すべてのシェルスクリプトがPOSIX準拠するべきだ
> と言ってるのね。好きにしろではなくてPOSIXを強く勧める押し付けがましく
っていう感想に変わっちゃうんだよねw
Javaで例えれば冷静になって、
> ドライバがJavaで書けるなら書く人もいるだろう。
っていうわけだよね
でも、POSIXで書けばいろんなOSで動きますって言うと、頭に血が上って
> すべてのシェルスクリプトがPOSIX準拠するべきだ
> と言ってるのね。好きにしろではなくてPOSIXを強く勧める押し付けがましく
っていう感想に変わっちゃうんだよねw
937デフォルトの名無しさん
2019/08/10(土) 23:33:23.10ID:L+B8OP2P 俺が「POSIXで書けばいろんな環境で動きます。」って言ったんだから
「POSIXで書けるなら書く人もいるだろう。」って言えばいいだけなのにw
Javaの場合みたいに!
「POSIXで書けるなら書く人もいるだろう。」って言えばいいだけなのにw
Javaの場合みたいに!
938デフォルトの名無しさん
2019/08/10(土) 23:36:17.65ID:AU+T1mdi 全然わかってなくて、そのレスは酷い。なにか揚げ足とってよろこんでいるように見えるけどw
問題なければいいよどうでもというのと、問題なくてもメリットがあるからこっちに「決まってる」という違い
問題なければいいよどうでもというのと、問題なくてもメリットがあるからこっちに「決まってる」という違い
939デフォルトの名無しさん
2019/08/10(土) 23:37:50.32ID:L+B8OP2P メリットを言うと「こっちに決まってる」という文章が書いてあると
勝手に脳内で補完してるんですか?
勝手に脳内で補完してるんですか?
940デフォルトの名無しさん
2019/08/10(土) 23:38:26.61ID:L+B8OP2P Javaのメリットを言いました。
メリットがあるから、こっちに「決まってる」と?
メリットがあるから、こっちに「決まってる」と?
941デフォルトの名無しさん
2019/08/10(土) 23:40:37.90ID:AU+T1mdi >POSIX準拠の範囲でできるなら、POSIX準拠でやればいいだろ。対して手間もかからんし
>する必要もないのに、bashに依存してる人
自分で何を言ってきたのか忘れたの?
>する必要もないのに、bashに依存してる人
自分で何を言ってきたのか忘れたの?
942デフォルトの名無しさん
2019/08/10(土) 23:41:50.08ID:L+B8OP2P943デフォルトの名無しさん
2019/08/10(土) 23:42:48.99ID:AU+T1mdi ソコからなんだけど。そんな直前レスに対しての揚げ足とり的なじゃなくw
944デフォルトの名無しさん
2019/08/10(土) 23:45:04.58ID:AU+T1mdi 結局いろいろ逃げてるけど、本心としては
すべてのシェルスクリプトがPOSIX準拠するべきだ
なんだろに。それもただ言ってみただけなのね、なぜか複数が見る掲示板でw
まあいいや
すべてのシェルスクリプトがPOSIX準拠するべきだ
なんだろに。それもただ言ってみただけなのね、なぜか複数が見る掲示板でw
まあいいや
945デフォルトの名無しさん
2019/08/10(土) 23:45:09.53ID:L+B8OP2P >>943
言うべき言葉は何も見つからなかったの?中身がなにもないんだけど?
言うべき言葉は何も見つからなかったの?中身がなにもないんだけど?
946デフォルトの名無しさん
2019/08/10(土) 23:45:53.29ID:L+B8OP2P947デフォルトの名無しさん
2019/08/10(土) 23:46:08.90ID:AU+T1mdi 正直なにを言い出してるのだかと困惑からだよ
948デフォルトの名無しさん
2019/08/10(土) 23:46:21.22ID:L+B8OP2P お、100レスいったでー(笑)
949デフォルトの名無しさん
2019/08/10(土) 23:46:38.90ID:x0rFB4wI 次のスレタイに【POSIX限定】って付けとけよ
アンチ除けになっていいと思うぞ
アンチ除けになっていいと思うぞ
950デフォルトの名無しさん
2019/08/10(土) 23:46:51.76ID:AU+T1mdi >>946
とてもそうは見えないという結論だな。俺の結論だから気にしなくていいよw
とてもそうは見えないという結論だな。俺の結論だから気にしなくていいよw
951デフォルトの名無しさん
2019/08/10(土) 23:47:16.77ID:L+B8OP2P952デフォルトの名無しさん
2019/08/10(土) 23:47:33.55ID:L+B8OP2P のがしたorz (笑)
953デフォルトの名無しさん
2019/08/10(土) 23:48:57.21ID:AU+T1mdi >>949でよろしくねw
954デフォルトの名無しさん
2019/08/10(土) 23:49:36.20ID:L+B8OP2P 覚えてたらな
955デフォルトの名無しさん
2019/08/10(土) 23:59:39.51ID:6d2gRK68 そういや 【POSIX】 sh系互換 シェルスクリプトスレ ってのがあるやん
956デフォルトの名無しさん
2019/08/11(日) 00:00:12.33ID:GFStkW/c え?どこに?
957デフォルトの名無しさん
2019/08/11(日) 00:01:16.28ID:GFStkW/c ほんとだ!見逃してた! 次スレの関連リンクに追加しといたよ
【POSIX】 sh系互換 シェルスクリプトスレ
https://mevius.5ch.net/test/read.cgi/tech/1535195112/
【POSIX】 sh系互換 シェルスクリプトスレ
https://mevius.5ch.net/test/read.cgi/tech/1535195112/
958デフォルトの名無しさん
2019/08/11(日) 00:02:01.46ID:vE4Lr4uN ほんとだw
2018/08/25
って、つい先日かと思ったら一年前かw
2018/08/25
って、つい先日かと思ったら一年前かw
959デフォルトの名無しさん
2019/08/11(日) 00:02:46.24ID:vE4Lr4uN スレ建ててくれたけど、どうかあちらを有効に使っていただきたい
960デフォルトの名無しさん
2019/08/11(日) 00:03:02.68ID:lm+uP+yI あるのかよw
これで棲み分けできるな
これで棲み分けできるな
961デフォルトの名無しさん
2019/08/11(日) 00:03:08.16ID:dSI5JGW8 一年も放置されててよく削除されなかったなw
962デフォルトの名無しさん
2019/08/11(日) 00:05:11.80ID:GFStkW/c 住処が二つになった!ドンッ!!
963デフォルトの名無しさん
2019/08/11(日) 00:10:56.97ID:GFStkW/c ここはPOSIX準拠じゃないスレも対応?
fishとかの話題もどんどん扱うってことかな?
fishとかの話題もどんどん扱うってことかな?
964デフォルトの名無しさん
2019/08/11(日) 00:13:32.87ID:GFStkW/c fishってPOSIXと互換性はかなり低かったと思うんだが、
最終的に高い互換性を持たせるつもりなん?
https://www.excite.co.jp/news/article/Cobs_1862541/
> POSIX互換シェルとの互換性向上のために&&、||、!をサポート
fishの設計理念5原則(翻訳):使いやすさのための数々の気遣い
http://fish.rubikitch.com/design-document-ja/
> 可能な限り上記の目標を崩すことなく、fishはPOSIXの構文に従うべきです。
最終的に高い互換性を持たせるつもりなん?
https://www.excite.co.jp/news/article/Cobs_1862541/
> POSIX互換シェルとの互換性向上のために&&、||、!をサポート
fishの設計理念5原則(翻訳):使いやすさのための数々の気遣い
http://fish.rubikitch.com/design-document-ja/
> 可能な限り上記の目標を崩すことなく、fishはPOSIXの構文に従うべきです。
965デフォルトの名無しさん
2019/08/11(日) 00:14:43.26ID:vE4Lr4uN 最近では PowerShell なんてもあったり
どんどん扱うとかそういうんじゃなくて、そう否定するのはいないんじゃないかな
知らんけど
どんどん扱うとかそういうんじゃなくて、そう否定するのはいないんじゃないかな
知らんけど
966デフォルトの名無しさん
2019/08/11(日) 00:15:10.68ID:GFStkW/c http://fish.rubikitch.com/design-document-ja/
> ・ヒアドキュメントは パイプライン で echo コマンドを使うこととほとんど変わらないので不採用です。
> (訳注:「string trim 複数行文字列リテラル」でも代用可能)
> ・サブシェルとコマンド置換とプロセス置換はとても類似性が強いです。fishは コマンド置換 のみをサポートしています。
> それ以外はブロックまたはpsub標準シェル関数 で実現できます。
> ・別名定義 と シェル関数 の双方を持つことは混乱を招きます。特別にどちらも制限と欠点があるからです。
> fishの関数はいずれの構文の欠点も存在しません。
> ・POSIXのクオートの仕様は馬鹿げています!とくにシングルクォートは!!
やっぱ互換性はないと考えたほうが良いか
> ・ヒアドキュメントは パイプライン で echo コマンドを使うこととほとんど変わらないので不採用です。
> (訳注:「string trim 複数行文字列リテラル」でも代用可能)
> ・サブシェルとコマンド置換とプロセス置換はとても類似性が強いです。fishは コマンド置換 のみをサポートしています。
> それ以外はブロックまたはpsub標準シェル関数 で実現できます。
> ・別名定義 と シェル関数 の双方を持つことは混乱を招きます。特別にどちらも制限と欠点があるからです。
> fishの関数はいずれの構文の欠点も存在しません。
> ・POSIXのクオートの仕様は馬鹿げています!とくにシングルクォートは!!
やっぱ互換性はないと考えたほうが良いか
967デフォルトの名無しさん
2019/08/11(日) 00:25:40.31ID:GFStkW/c おい、ついてこいよw
せっかくPOSIX以外の話もしてるんだから
せっかくPOSIX以外の話もしてるんだから
968デフォルトの名無しさん
2019/08/11(日) 00:27:49.34ID:vE4Lr4uN なんで「誰もが」興味があると思うのか
969デフォルトの名無しさん
2019/08/11(日) 00:29:16.73ID:GFStkW/c 関数定義の構文も違ってるみたいだ
https://fishshell.com/docs/current/tutorial.html#tut_functions
https://fishshell.com/docs/current/tutorial.html#tut_functions
970デフォルトの名無しさん
2019/08/11(日) 02:09:43.49ID:EariAe7h >>714-732
Ruby で作った
require "csv"
options = { :headers => true, :col_sep => "\t" }
table_1 = CSV.read( "hoge.tsv", options ) # 読み込み
table_2 = CSV.read( "huga.tsv", options ) # 読み込み
CSV.open( "hoge_huga.tsv", "w", options ) do |csv| # 書き込み
csv << %w(a b c d e) # header
table_1.zip( table_2 ).each do |one, two|
csv << [ one[ "a" ], one[ "b" ], two[ "c" ], two[ "d" ], one[ "e" ] ]
end
end
Ruby で作った
require "csv"
options = { :headers => true, :col_sep => "\t" }
table_1 = CSV.read( "hoge.tsv", options ) # 読み込み
table_2 = CSV.read( "huga.tsv", options ) # 読み込み
CSV.open( "hoge_huga.tsv", "w", options ) do |csv| # 書き込み
csv << %w(a b c d e) # header
table_1.zip( table_2 ).each do |one, two|
csv << [ one[ "a" ], one[ "b" ], two[ "c" ], two[ "d" ], one[ "e" ] ]
end
end
971デフォルトの名無しさん
2019/08/11(日) 02:44:21.08ID:GFStkW/c >>970
勘違いしてるぞ。明確に書いてはないかもしれんが a b c d e はヘッダじゃなくてデータだ。
eachは不要。あといつになったら、その古いハッシュの書き方をやめるんだ?
訂正版
require 'csv'
options = { col_sep: "\t" }
table1 = CSV.read('hoge.tsv', options)
table2 = CSV.read('huga.tsv', options)
CSV.open('hoge_huga.tsv', 'w', options) do |csv|
table1.zip(table2) do |one, two|
csv << [one[0], one[1], two[0], two[1], one[2]]
end
end
勘違いしてるぞ。明確に書いてはないかもしれんが a b c d e はヘッダじゃなくてデータだ。
eachは不要。あといつになったら、その古いハッシュの書き方をやめるんだ?
訂正版
require 'csv'
options = { col_sep: "\t" }
table1 = CSV.read('hoge.tsv', options)
table2 = CSV.read('huga.tsv', options)
CSV.open('hoge_huga.tsv', 'w', options) do |csv|
table1.zip(table2) do |one, two|
csv << [one[0], one[1], two[0], two[1], one[2]]
end
end
972デフォルトの名無しさん
2019/08/11(日) 03:58:29.22ID:FACDvm3m 偉ぶりたい満々やな
973デフォルトの名無しさん
2019/08/11(日) 04:23:39.41ID:GTeyRs5o 長いと大変そう
ruby にもこういうのありそう
DB<8> @a = qw(a b e)
DB<9> splice @a, 2, 0, qw(c d)
DB<10> print @a
abcde
ruby にもこういうのありそう
DB<8> @a = qw(a b e)
DB<9> splice @a, 2, 0, qw(c d)
DB<10> print @a
abcde
974デフォルトの名無しさん
2019/08/11(日) 04:38:47.36ID:++HFlOfG >>973
それがRubyにはPerlやJavaScriptみたいなspliceがないんだよね
でも今回は、挿入するだけだから、 csv << one.insert(2, *two) が使えるね
順番をもっと柔軟に変えたいってなると面倒だけど
それがRubyにはPerlやJavaScriptみたいなspliceがないんだよね
でも今回は、挿入するだけだから、 csv << one.insert(2, *two) が使えるね
順番をもっと柔軟に変えたいってなると面倒だけど
975デフォルトの名無しさん
2019/08/11(日) 05:27:14.15ID:oR4Xkpxd >>660
そういやこんなのはいかんの?
てか、こういう答え既に出た?
#!/bin/sh
cf=0
for f
do
if [[ cf -eq 0 ]]; then
cf=1
else
echo -n ','
fi
echo -n "x${f}z"
done
echo ''
そういやこんなのはいかんの?
てか、こういう答え既に出た?
#!/bin/sh
cf=0
for f
do
if [[ cf -eq 0 ]]; then
cf=1
else
echo -n ','
fi
echo -n "x${f}z"
done
echo ''
976デフォルトの名無しさん
2019/08/11(日) 16:04:36.86ID:++HFlOfG >>975
echo -n はPOSIX準拠ではない。が、メンテナンスが続いている最新シェルはすべてサポートされている
と思っていたんだが、上の方で出てるboshが対応してなかったわw
やっぱりprintfを使うのが一番なんだろうな
echo -n はPOSIX準拠ではない。が、メンテナンスが続いている最新シェルはすべてサポートされている
と思っていたんだが、上の方で出てるboshが対応してなかったわw
やっぱりprintfを使うのが一番なんだろうな
977デフォルトの名無しさん
2019/08/11(日) 16:19:01.34ID:++HFlOfG 改めて調べ直してみたら、yashも-nに対応してなかった。
echo -n aaa ってやったら、 -n aaa って出力される。
単純な出力以外printfばっかり使ってたから忘れてたw
echo -n aaa ってやったら、 -n aaa って出力される。
単純な出力以外printfばっかり使ってたから忘れてたw
978デフォルトの名無しさん
2019/08/11(日) 16:34:27.13ID:++HFlOfG > if [[ cf -eq 0 ]]; then
bash依存する必要がないのに、bash依存してる例
bash依存する必要がないのに、bash依存してる例
979デフォルトの名無しさん
2019/08/11(日) 16:44:43.77ID:k+c7cOcw 重箱の隅が気になって仕方がないのね
そういうのは原理主義者としか思えないけどw
適切なスレが別にあるとわかったんだからそっちでどうぞ
そういうのは原理主義者としか思えないけどw
適切なスレが別にあるとわかったんだからそっちでどうぞ
980デフォルトの名無しさん
2019/08/11(日) 16:45:13.10ID:2JPwQqrg やっぱりどこでも動くシェルスクリプトなんて幻想なんだね
981デフォルトの名無しさん
2019/08/11(日) 16:52:18.97ID:lm+uP+yI bash で書くならシェバンで明示するべし
#!/usr/bin/env bash
#!/usr/bin/env bash
982デフォルトの名無しさん
2019/08/11(日) 17:03:10.35ID:k+c7cOcw 間違いはそこだよなあ。単に
#!/bin/bash
と書こうとして、うっかり
#!/bin/sh
にしてしまった感じかな
#!/bin/bash
と書こうとして、うっかり
#!/bin/sh
にしてしまった感じかな
983デフォルトの名無しさん
2019/08/11(日) 17:34:07.21ID:++HFlOfG >>979
debianはbash依存をなくすのに苦労したらしいからね。
https://wiki.ubuntu.com/DashAsBinSh
> The major reason to switch the default shell was efficiency.
デフォルトシェルを(dash)に変更する理由は効率性です。
> Programs should be written to the standard,
>and if they use extensions they should declare them;
プログラムは標準で書くべきである。拡張を使うなら宣言しなさい。
正しい言葉だ。
拡張を使う理由がないのに効率性を落とす意味ないからね。
debianはbash依存をなくすのに苦労したらしいからね。
https://wiki.ubuntu.com/DashAsBinSh
> The major reason to switch the default shell was efficiency.
デフォルトシェルを(dash)に変更する理由は効率性です。
> Programs should be written to the standard,
>and if they use extensions they should declare them;
プログラムは標準で書くべきである。拡張を使うなら宣言しなさい。
正しい言葉だ。
拡張を使う理由がないのに効率性を落とす意味ないからね。
984デフォルトの名無しさん
2019/08/11(日) 17:41:28.14ID:++HFlOfG >>980
どこでも動くために、POSIXに準拠することの大切さがわかるよね。
どこでも動くために、POSIXに準拠することの大切さがわかるよね。
985デフォルトの名無しさん
2019/08/11(日) 17:42:11.13ID:++HFlOfG986デフォルトの名無しさん
2019/08/11(日) 17:46:23.18ID:k+c7cOcw 傲慢だな。そうじゃないと今までの自分のレスが馬鹿みたいだから...
知らないのかもしれないが、/bin/sh が bash の場合、ちゃんとは動かない
てか、あっちのスレを行けよ
知らないのかもしれないが、/bin/sh が bash の場合、ちゃんとは動かない
てか、あっちのスレを行けよ
987デフォルトの名無しさん
2019/08/11(日) 17:49:05.08ID:k+c7cOcw ああ、/bin/sh が bash で、しかも、bash が 3.x の場合かもしれない
/bin/sh が bash であっても、#!/bin/sh だと>>975のスクリプトはうまく動かないのはね。なので、うっかりとしか思えんな
/bin/sh が bash であっても、#!/bin/sh だと>>975のスクリプトはうまく動かないのはね。なので、うっかりとしか思えんな
988デフォルトの名無しさん
2019/08/11(日) 17:50:38.09ID:++HFlOfG > /bin/sh が bash の場合、ちゃんとは動かない
だからちゃんと動かないコードを直すべきでは?
/bin/shはdash, bash, ash, ksh, zsh, mksh のいずれかの可能性がある(他にもあるかもしれない)
だからちゃんと動かないコードを直すべきでは?
/bin/shはdash, bash, ash, ksh, zsh, mksh のいずれかの可能性がある(他にもあるかもしれない)
989デフォルトの名無しさん
2019/08/11(日) 17:51:46.41ID:k+c7cOcw990デフォルトの名無しさん
2019/08/11(日) 17:57:05.79ID:++HFlOfG991デフォルトの名無しさん
2019/08/11(日) 17:59:38.45ID:++HFlOfG >>989
/bin/shのシンボリックリンクの実体がbash、
つまりposixモードの話をしてるのかもしれないけど、
posixモード(set -o posix)であっても [[ ]] は認識しちゃうからね。
bashのposixモードは、挙動の違いをposixに合わせるだけで
posixにはない拡張機能を無効にすることはないみたい。
/bin/shのシンボリックリンクの実体がbash、
つまりposixモードの話をしてるのかもしれないけど、
posixモード(set -o posix)であっても [[ ]] は認識しちゃうからね。
bashのposixモードは、挙動の違いをposixに合わせるだけで
posixにはない拡張機能を無効にすることはないみたい。
992デフォルトの名無しさん
2019/08/11(日) 18:01:22.10ID:++HFlOfG993デフォルトの名無しさん
2019/08/11(日) 18:01:36.14ID:k+c7cOcw #!/bin/sh
てか、sh とコマンド打って起動してでも、echo -n hello は -n hello と表示されるんだなあ。うちのはw
type echo しても echo is a shell builtin だしね。てか、/bin/echo は -n が効くやつだけど
てか、sh とコマンド打って起動してでも、echo -n hello は -n hello と表示されるんだなあ。うちのはw
type echo しても echo is a shell builtin だしね。てか、/bin/echo は -n が効くやつだけど
994デフォルトの名無しさん
2019/08/11(日) 18:02:28.72ID:k+c7cOcw ちなみに、bash --posix で起動しても echo -n hello は -n hello にはならん、なぞww
995デフォルトの名無しさん
2019/08/11(日) 18:07:05.61ID:++HFlOfG > echo -n hello は -n hello と表示されるんだなあ。
POSIXのechoには-nはないからね。-nに依存するコードを書いてはいけない。
POSIX準拠で書く理由が増えたね。
POSIXのechoには-nはないからね。-nに依存するコードを書いてはいけない。
POSIX準拠で書く理由が増えたね。
996デフォルトの名無しさん
2019/08/11(日) 18:07:37.64ID:k+c7cOcw 誰かさんも使ってると言っていた環境なんだけどなw
$ which sh
/bin/sh
$ ls -l /bin/sh
-r-xr-xr-x 1 root wheel 618480 5 4 16:05 /bin/sh
$ sh --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin18)
Copyright (C) 2007 Free Software Foundation, Inc.
$ sh
$ echo -n hello
-n hello
$ exit
exit
$ bash --posix
$ echo -n hello
hello$
$ which sh
/bin/sh
$ ls -l /bin/sh
-r-xr-xr-x 1 root wheel 618480 5 4 16:05 /bin/sh
$ sh --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin18)
Copyright (C) 2007 Free Software Foundation, Inc.
$ sh
$ echo -n hello
-n hello
$ exit
exit
$ bash --posix
$ echo -n hello
hello$
997デフォルトの名無しさん
2019/08/11(日) 18:08:18.76ID:++HFlOfG998デフォルトの名無しさん
2019/08/11(日) 18:08:27.92ID:k+c7cOcw >>995
自説の繰り替えしだけか。しょうもない
自説の繰り替えしだけか。しょうもない
999デフォルトの名無しさん
2019/08/11(日) 18:09:01.47ID:k+c7cOcw >>997
よく読めよ。都合が悪くて妄想モードか?
よく読めよ。都合が悪くて妄想モードか?
1000デフォルトの名無しさん
2019/08/11(日) 18:09:45.54ID:lm+uP+yI 1000!
10011001
Over 1000Thread このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 40日 19時間 5分 18秒
新しいスレッドを立ててください。
life time: 40日 19時間 5分 18秒
10021002
Over 1000Thread 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。
ニュース
- 高市首相、トランプ米大統領に「早期に会いたい」 日中関係悪化受け… ★4 [BFU★]
- 「もうキモくてキモくて…」29歳女性が語る“おぢアタック”の実態。「俺ならイケるかも」年下女性を狙う勘違い中年男性には共通点が [Hitzeschleier★]
- 【コメ】卸売業者「簡単に安売りできない」「大暴落起きれば大赤字に」 JA「新米の販売進度が近年になく遅い。コメの回転が悪い」 ★5 [Hitzeschleier★]
- テレビ朝日 本社から男性が転落し死亡。関連会社社員か 当たった通行人が左肩軽傷 [阿弥陀ヶ峰★]
- テレビ朝日本社から20~30代の関連会社社員とみられる男性が転落し死亡 六本木けやき坂通りの通行人にはけが人なし [少考さん★]
- 「これいいじゃん!!!」 セブン-イレブンの1620円で買える“1人用クリスマスケーキ”🎂に注目殺到「天才すぎる」 [パンナ・コッタ★]
- 【高市速報】中国、最後通牒 [308389511]
- このラーメンに1000円出せる?
- 最近のVIP人いなくね?
- 【高市速報】中国、世界の敵になり始めるwwwwwwwwwwwwww [308389511]
- しね✋ーーーーー☀
- 【速報】テレビ朝日本社から20代〜30代の男性が飛び降り自殺して死亡 東京・六本木 [597533159]
