シェルスクリプトに関する総合スレッドです。
全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。
前スレ:
シェルスクリプト総合 その28
http://mevius.5ch.net/test/read.cgi/tech/1532397676/
シェルスクリプト総合 その29
レス数が1000を超えています。これ以上書き込みはできません。
2018/09/21(金) 23:34:47.98ID:/eJt2TVD
957デフォルトの名無しさん
2019/07/01(月) 23:20:50.03ID:/rKj5XUf958デフォルトの名無しさん
2019/07/01(月) 23:37:03.32ID:4+biahsm おまえらまとめるの好きだよなw
959デフォルトの名無しさん
2019/07/01(月) 23:41:59.98ID:KK3BgYtY POSIX (というか BSD の /bin/sh である dash?) に合わせたほうが幸せなのか
#!/bin/bash って書いて bash 限定にしたほうが幸せなのか。
個人的には後者でサクッと短時間でかつ可読性高く仕上げるのが好み。
#!/bin/bash って書いて bash 限定にしたほうが幸せなのか。
個人的には後者でサクッと短時間でかつ可読性高く仕上げるのが好み。
960デフォルトの名無しさん
2019/07/01(月) 23:44:17.54ID:GotlxjDf > というか BSD の /bin/sh である dash?
dashのdはdebian linuxのdな
> 個人的には後者でサクッと短時間でかつ可読性高く仕上げるのが好み。
それはPOSIX(dash)でもbashでも変わらん
dashのdはdebian linuxのdな
> 個人的には後者でサクッと短時間でかつ可読性高く仕上げるのが好み。
それはPOSIX(dash)でもbashでも変わらん
961デフォルトの名無しさん
2019/07/02(火) 00:01:10.80ID:p7jTc1Zw 可搬性云々は要件次第なんだよ
動作保証は Ubuntuのみで良いなら環境依存で書けばいい
動作保証は Ubuntuのみで良いなら環境依存で書けばいい
962デフォルトの名無しさん
2019/07/02(火) 00:02:35.22ID:Tm8GOmHy >>960
> dashのdはdebian linuxのdな
これは勉強不足で失礼いたしました。
>それはPOSIX(dash)でもbashでも変わらん
POSIX(dash) で [[ =~ ]] って簡潔に書ける?
for ((i=0;16>i;i++)) ; do (loop内で $i 更新あり) とかは?
> dashのdはdebian linuxのdな
これは勉強不足で失礼いたしました。
>それはPOSIX(dash)でもbashでも変わらん
POSIX(dash) で [[ =~ ]] って簡潔に書ける?
for ((i=0;16>i;i++)) ; do (loop内で $i 更新あり) とかは?
963デフォルトの名無しさん
2019/07/02(火) 00:06:02.50ID:+q6wCm94 GNU拡張はGNUの方言だけどBSDにも方言くらいあるでしょ
BSDだけで盛られたコマンドってないの
BSDだけで盛られたコマンドってないの
964デフォルトの名無しさん
2019/07/02(火) 00:15:08.55ID:Atdu9zIi >>962
> POSIX(dash) で [[ =~ ]] って簡潔に書ける?
多くはcaseで十分。足りなければexprを使えばいい。
> for ((i=0;16>i;i++)) ; do (loop内で $i 更新あり) とかは?
seqかwhileを使えばいい
> POSIX(dash) で [[ =~ ]] って簡潔に書ける?
多くはcaseで十分。足りなければexprを使えばいい。
> for ((i=0;16>i;i++)) ; do (loop内で $i 更新あり) とかは?
seqかwhileを使えばいい
965デフォルトの名無しさん
2019/07/02(火) 00:31:10.69ID:rBxHnYzF >>964
exprってPOSIXだも正規表現処理できるのか。
exprってPOSIXだも正規表現処理できるのか。
966デフォルトの名無しさん
2019/07/02(火) 00:34:13.92ID:uO4UDEG+ 簡潔にって書いてあるだろうに
967デフォルトの名無しさん
2019/07/02(火) 00:37:15.66ID:Tm8GOmHy968デフォルトの名無しさん
2019/07/02(火) 01:41:05.60ID:Atdu9zIi969デフォルトの名無しさん
2019/07/02(火) 01:43:35.24ID:Atdu9zIi >>965
https://pubs.opengroup.org/onlinepubs/009695399/utilities/expr.html
> The ':' matching operator shall compare the string resulting from the evaluation of expr1 with
> the regular expression pattern
https://pubs.opengroup.org/onlinepubs/009695399/utilities/expr.html
> The ':' matching operator shall compare the string resulting from the evaluation of expr1 with
> the regular expression pattern
970デフォルトの名無しさん
2019/07/02(火) 01:44:27.35ID:uO4UDEG+ 好みって言っているのに。それはあなたの好み
好みに合うようななにかを提示するかスルーすればいいだろうに
好みに合うようななにかを提示するかスルーすればいいだろうに
971デフォルトの名無しさん
2019/07/02(火) 03:09:33.83ID:rBxHnYzF >>962
[[ "$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
こんなもんでいかがでしょ。
簡潔かつ高い可搬性を持ったシェルスクリプトになったと思う。
よければこれから書く可搬性の高いシェルスクリプトの参考にしてみて!
[[ "$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
こんなもんでいかがでしょ。
簡潔かつ高い可搬性を持ったシェルスクリプトになったと思う。
よければこれから書く可搬性の高いシェルスクリプトの参考にしてみて!
972デフォルトの名無しさん
2019/07/02(火) 03:45:23.93ID:uO4UDEG+ まさか、その変えた方が簡潔かつ高い可搬性を持ったという??
なんのためのbash(などの)の拡張なんだかだよ。俺には理解できない。まあ、ID:Tm8GOmHyが理解できたら特にだけど
なんのためのbash(などの)の拡張なんだかだよ。俺には理解できない。まあ、ID:Tm8GOmHyが理解できたら特にだけど
973デフォルトの名無しさん
2019/07/02(火) 03:49:34.72ID:uO4UDEG+ ところで、while内での変数の変更とかどうしてんの?そんなにPOSIXに拘る人は
974デフォルトの名無しさん
2019/07/02(火) 03:52:13.98ID:uO4UDEG+ ああ、パイプでサブシェルになってしまう場合のwhileね。よく使うパターンの
975デフォルトの名無しさん
2019/07/02(火) 03:55:40.28ID:Atdu9zIi たったこれだけの違いで大騒ぎ(笑)
976デフォルトの名無しさん
2019/07/02(火) 03:58:00.36ID:uO4UDEG+ お前がいうなw
977デフォルトの名無しさん
2019/07/02(火) 04:01:44.98ID:Atdu9zIi >>974
今後の人生、サブシェルの中に移住すればいいだけだろ
cat dummy.txt | {
i=0
while IFS= read -r line; do
i=$((i+1))
done
echo "$i"
}
今後の人生、サブシェルの中に移住すればいいだけだろ
cat dummy.txt | {
i=0
while IFS= read -r line; do
i=$((i+1))
done
echo "$i"
}
978デフォルトの名無しさん
2019/07/02(火) 04:05:15.58ID:uO4UDEG+ そのcatレベルで必要なんじゃね、普通は
そんな狭いパターンが主なのか?お前の人生は。俺の人生でそのパターンは少なさそう
そういうんじゃないよ普遍的wなのでだよ
そんな狭いパターンが主なのか?お前の人生は。俺の人生でそのパターンは少なさそう
そういうんじゃないよ普遍的wなのでだよ
979デフォルトの名無しさん
2019/07/02(火) 04:05:54.52ID:Atdu9zIi >>978
イミフ。例を出せ例を
イミフ。例を出せ例を
980デフォルトの名無しさん
2019/07/02(火) 04:12:40.39ID:Atdu9zIi981デフォルトの名無しさん
2019/07/02(火) 04:21:16.83ID:uO4UDEG+ なにか前処理
hoge=0
cat | while IFS= read -r line; do
[ なにか ] && hoge=1
ほかにいろいろ
done
if [ hoge = 0 ]; then
前処理の調整
else
前処理の調整
fi
とか。ループ中に例外的なのを検出した後にトップレベルで整理するとか。あとは、whileの後にもパイプで続けてその後でとか。局所的なので使うことはないな
気が短いなw
hoge=0
cat | while IFS= read -r line; do
[ なにか ] && hoge=1
ほかにいろいろ
done
if [ hoge = 0 ]; then
前処理の調整
else
前処理の調整
fi
とか。ループ中に例外的なのを検出した後にトップレベルで整理するとか。あとは、whileの後にもパイプで続けてその後でとか。局所的なので使うことはないな
気が短いなw
982デフォルトの名無しさん
2019/07/02(火) 04:29:33.75ID:Atdu9zIi こうすればいいだけw
なにか前処理
cat | {
hoge=0
while IFS= read -r line; do
[ なにか ] && hoge=1
ほかにいろいろ
done
if [ hoge = 0 ]; then
前処理の調整
else
前処理の調整
fi
}
なにか前処理
cat | {
hoge=0
while IFS= read -r line; do
[ なにか ] && hoge=1
ほかにいろいろ
done
if [ hoge = 0 ]; then
前処理の調整
else
前処理の調整
fi
}
983デフォルトの名無しさん
2019/07/02(火) 04:33:37.38ID:uO4UDEG+ ほんとうにそれでいいと思うのか?w
なんか無理してんなと思うけど、POSIXに拘る人はそう書くのねと理解はした、お応えありがとう
なんか無理してんなと思うけど、POSIXに拘る人はそう書くのねと理解はした、お応えありがとう
984デフォルトの名無しさん
2019/07/02(火) 04:35:32.93ID:Atdu9zIi985デフォルトの名無しさん
2019/07/02(火) 04:37:28.40ID:uO4UDEG+ いやあ、ああいうのが普通な人には何も言い返せないよ。てか「言い返す」って。喧嘩かなんかなのか?w
986デフォルトの名無しさん
2019/07/02(火) 04:41:11.93ID:Atdu9zIi 喧嘩じゃなくて、お前の意見を言えって。
正しく動くだろ?
なにか問題が有るのか?
正しく動くだろ?
なにか問題が有るのか?
987デフォルトの名無しさん
2019/07/02(火) 04:45:47.25ID:Atdu9zIi シェルスクリプト初心者です。 { } の使い方がわかりません
とかいうなら、関数にでもすればいい
foo() {
なにか前処理
hoge=0
while IFS= read -r line; do
[ なにか ] && hoge=1
ほかにいろいろ
done
if [ hoge = 0 ]; then
前処理の調整
else
前処理の調整
fi
}
cat | foo
お前の苦手な { } が無くてすんだぞw
サブシェルうんぬんの前に、関数の中で使う変数は、関数の中にとどめておけよ。
わかりやすいコーディングというのはこういうものだ
とかいうなら、関数にでもすればいい
foo() {
なにか前処理
hoge=0
while IFS= read -r line; do
[ なにか ] && hoge=1
ほかにいろいろ
done
if [ hoge = 0 ]; then
前処理の調整
else
前処理の調整
fi
}
cat | foo
お前の苦手な { } が無くてすんだぞw
サブシェルうんぬんの前に、関数の中で使う変数は、関数の中にとどめておけよ。
わかりやすいコーディングというのはこういうものだ
988デフォルトの名無しさん
2019/07/02(火) 04:47:32.87ID:uO4UDEG+ そのサブシェルの中で後は全部やるんでしょ?必要な部分を。それで問題無いと思うなら、それでいいんじゃないの
「なんか無理してんな」ってのがわからないんだったらそれはそれでいいよ。元ネタと同じく、好みの問題。好みがわからないでしょ
「なんか無理してんな」ってのがわからないんだったらそれはそれでいいよ。元ネタと同じく、好みの問題。好みがわからないでしょ
989デフォルトの名無しさん
2019/07/02(火) 04:50:12.51ID:Atdu9zIi だから問題ないし、お前を含めて誰も問題があると言ってない。
お前さ、なんで自分で問題点を指摘できないのに
さも問題があるかのように装ってるわけ?
ばれないとでも思った?
お前さ、なんで自分で問題点を指摘できないのに
さも問題があるかのように装ってるわけ?
ばれないとでも思った?
990デフォルトの名無しさん
2019/07/02(火) 04:50:38.17ID:uO4UDEG+ なにか頑張ってるな。そんな話じゃないよ
知識自慢臭しかもうしませんよ?そんなの自慢げというか馬鹿にしたいだけなのか知らんけど
知識自慢臭しかもうしませんよ?そんなの自慢げというか馬鹿にしたいだけなのか知らんけど
991デフォルトの名無しさん
2019/07/02(火) 04:53:12.30ID:Atdu9zIi そんな話じゃないよ → じゃあどんな話なのか → 答えずに逃げる(笑)
992デフォルトの名無しさん
2019/07/02(火) 04:53:48.95ID:uO4UDEG+ 問題がある問題がないの話じゃないよ。好みだよ好み
そう次々あれこれ考えなくてもw bash(など)の拡張使えばスッキリだろうにという
そう次々あれこれ考えなくてもw bash(など)の拡張使えばスッキリだろうにという
993デフォルトの名無しさん
2019/07/02(火) 04:54:45.55ID:Atdu9zIi >>987のどこがスッキリとしてないというのか?
お前ならbashでどう書き直す?w
お前ならbashでどう書き直す?w
994デフォルトの名無しさん
2019/07/02(火) 04:57:00.91ID:uO4UDEG+ hoge=0
while IFS= read -r line; do
[ なにか ] && hoge=1
ほかにいろいろ
done < <(cat)
if [ hoge = 0 ]; then
前処理の調整
else
前処理の調整
fi
そもそもやりたいことがレベルが変わらずにそのままでスッキリだなwあとあとでなにか追加もとかもね
while IFS= read -r line; do
[ なにか ] && hoge=1
ほかにいろいろ
done < <(cat)
if [ hoge = 0 ]; then
前処理の調整
else
前処理の調整
fi
そもそもやりたいことがレベルが変わらずにそのままでスッキリだなwあとあとでなにか追加もとかもね
995デフォルトの名無しさん
2019/07/02(火) 04:58:47.96ID:Atdu9zIi >>994
それ、俺が書いたfoo関数の中身を書いただけじゃねーかw
hoge=0
while IFS= read -r line; do
[ なにか ] && hoge=1
ほかにいろいろ
done
if [ hoge = 0 ]; then
前処理の調整
else
前処理の調整
fi
これで動くよ。
foo() {
上のコード
}
cat | foo
ってやればいいだけ
それ、俺が書いたfoo関数の中身を書いただけじゃねーかw
hoge=0
while IFS= read -r line; do
[ なにか ] && hoge=1
ほかにいろいろ
done
if [ hoge = 0 ]; then
前処理の調整
else
前処理の調整
fi
これで動くよ。
foo() {
上のコード
}
cat | foo
ってやればいいだけ
996デフォルトの名無しさん
2019/07/02(火) 05:01:09.48ID:Atdu9zIi Q.これをPOSIX準拠で書きたいのですが?
hoge=0
while IFS= read -r line; do
[ なにか ] && hoge=1
ほかにいろいろ
done < <(cat)
if [ hoge = 0 ]; then
前処理の調整
else
前処理の調整
fi
A. まず1. 関数にしましょう
foo() {
hoge=0
while IFS= read -r line; do
[ なにか ] && hoge=1
ほかにいろいろ
done < <(cat)
if [ hoge = 0 ]; then
前処理の調整
else
前処理の調整
fi
}
foo
hoge=0
while IFS= read -r line; do
[ なにか ] && hoge=1
ほかにいろいろ
done < <(cat)
if [ hoge = 0 ]; then
前処理の調整
else
前処理の調整
fi
A. まず1. 関数にしましょう
foo() {
hoge=0
while IFS= read -r line; do
[ なにか ] && hoge=1
ほかにいろいろ
done < <(cat)
if [ hoge = 0 ]; then
前処理の調整
else
前処理の調整
fi
}
foo
997デフォルトの名無しさん
2019/07/02(火) 05:01:36.77ID:uO4UDEG+ いや、だから、お題に対してだけじゃなくな。普遍的にって言ってるでしょ
それが普遍的なのか?
なんで否定されたのをそんなに拘るねん。否定してんのは俺の好みじゃないってだけだぞ?w
それが普遍的なのか?
なんで否定されたのをそんなに拘るねん。否定してんのは俺の好みじゃないってだけだぞ?w
998デフォルトの名無しさん
2019/07/02(火) 05:01:53.99ID:Atdu9zIi 2. bash依存の命令をなくしましょう。
foo() {
hoge=0
while IFS= read -r line; do
[ なにか ] && hoge=1
ほかにいろいろ
done
if [ hoge = 0 ]; then
前処理の調整
else
前処理の調整
fi
}
cat | foo
はい。完成です(笑)
foo() {
hoge=0
while IFS= read -r line; do
[ なにか ] && hoge=1
ほかにいろいろ
done
if [ hoge = 0 ]; then
前処理の調整
else
前処理の調整
fi
}
cat | foo
はい。完成です(笑)
999デフォルトの名無しさん
2019/07/02(火) 05:02:22.44ID:Atdu9zIi >>997
だから < <(cat) を使う場合の普遍的な解答
だから < <(cat) を使う場合の普遍的な解答
1000デフォルトの名無しさん
2019/07/02(火) 05:02:50.90ID:Atdu9zIi やっぱり書き方を知らんだけだったな(笑)
10011001
Over 1000Thread このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 283日 5時間 28分 4秒
新しいスレッドを立ててください。
life time: 283日 5時間 28分 4秒
レス数が1000を超えています。これ以上書き込みはできません。
ニュース
- 【中国外務省】日中関係悪化は高市氏に責任と名指しで非難… ★6 [BFU★]
- 債券・円・株「トリプル安」に…長期金利1.755%まで上昇、円は対ユーロで史上最安値 ★2 [蚤の市★]
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★6 [ぐれ★]
- 中国側が首相答弁の撤回要求、日本側拒否★3 [夜のけいちゃん★]
- 被爆者は「怒りが腹の底から湧いてくる」高市首相“非核三原則見直し報道”に被爆地で懸念や憤りの声《長崎》 [1ゲットロボ★]
- 「沖縄は日本ではない」とは言ってなかった。中国メディアのインタビューを韓国紙が誇張して報道か [夜のけいちゃん★]
- 【悲報】三越伊勢丹「おーい、インバウンドが居なくなったらお前ら代わりに店来いよ」ネトウヨ「そんな金あるわけねーだろ、ボケ!」 [616817505]
- ホテル業界、高市のせいで中国から大量キャンセル 「大変厳しい状態。一刻も早い収束を願います」 [271912485]
- 【正論】玉木雄一郎「高市さんの答弁は米軍が攻撃を受けた場合を前提としており、撤回するのは難しい」特定野党を完全論破 [519511584]
- おっぱい舐めさせて
- 👩「諸事情でミーアキャット飼えなくなったから誰か20万以上で買って😢」 [394133584]
- 【悲報】ネトウヨ「中国人観光客が減って観光しやすくなって良かったじゃん。俺は代わりに旅行しないけど」 [616817505]
