シェルスクリプト総合 その38at TECH
シェルスクリプト総合 その38 - 暇つぶし2ch5:デフォルトの名無しさん
22/12/19 02:43:48.53 HlSjKkDw.net
お上が決める事に口出ししても無意味しか言わない壊れたラジオよりは、行動力のあるアホの方が貢献してるのが皮肉

6:デフォルトの名無しさん
22/12/19 11:36:20.22 N0ztMMfe.net
POSIXを「お上」と勘違いするやつは愚かだね
POSIXは何も決めないし、決めてない
勘違いしてるやつの典型的な行動は
POSIXの仕様が変だと思った時にPOSIXのせいにして文句を言う
筋違いなのがわかっていない

7:デフォルトの名無しさん
22/12/19 12:04:01.74 ytAE1sHX.net
とりあえず同じ内容の投稿は一回までにしてくれ

8:デフォルトの名無しさん
22/12/19 12:23:54.61 ACKFaDCE.net
というか俺が考えた最強のシェルスクリプトの話はどうでもいいよ
ここでグダグダ言ってないで、bashのメーリングリストとかで
こんな機能考えました、作ってくださいって語ってくればいい

9:デフォルトの名無しさん
22/12/19 12:47:35.29 ytAE1sHX.net
前スレ見てもその主張に対して一つもコメント貰えてないじゃん、哀れな奴

10:デフォルトの名無しさん
22/12/19 12:55:27.07 ACKFaDCE.net
都合悪いから無視してるんだろうね

11:デフォルトの名無しさん
22/12/19 12:56:04.69 ACKFaDCE.net
あとコメントはもらえてるよ
よく読みな

12:デフォルトの名無しさん
22/12/19 21:15:07.83 kSP3DPlm.net
POSIX偏重主義者はめんどくさいもん。w

13:デフォルトの名無しさん
22/12/20 00:12:37.48 TxV4Yb7/.net
またいつものPOSIX原理主義者が来ていたのか。懲りないなw

14:デフォルトの名無しさん
23/01/01 11:46:15.75 tG5gg2/T.net
URLリンク(i.imgur.com)
紅白でシェルスクリプトが出てきた

15:デフォルトの名無しさん
23/01/01 23:20:26.96 EPk6GwwK.net
>>14
www

16:デフォルトの名無しさん
23/01/05 14:13:50.57 gL1mwsvj.net
最先端だぜ!

17:デフォルトの名無しさん
23/01/05 22:04:03.24 7AKtp3Yz.net
>>14
左側はこのファイルやね
URLリンク(github.com)

18:デフォルトの名無しさん
23/03/08 11:44:14.07 P4+/KkQa.net
スレチで悪いがGNU/diffutilsのスレがあれば教えてくれないか。
diff3の改善を考えていて、その辺詳しいor考慮中の奴がいれば話をしたい。

19:デフォルトの名無しさん
23/05/05 12:20:01.51 0uwn+ADY.net
アルゴリズムの改善案?

20:デフォルトの名無しさん
23/05/05 13:02:20.08 5lQzBSYZ.net
いやその上の階層。
具体的にはdiffと同様に-r指定で傘下ディレクトリ全対象にすればマージ出来てgitモドキが出来るんじゃね?とか、
UNIXコマンドにmergeってのがあるが、これがそうなのか?とか。

21:デフォルトの名無しさん
23/05/13 10:53:53.68 ag/ehtCI.net
すいません。
FreeBSD13.2の/bin/shですがループがread NAMEで止まる理由は&&の右項が0になるからですか?
ためしに|| trueを追加するとループが回りきったので実装的には結果が出てるのですが理由がわかりません。

> #!/bin/sh -xe
>
> echo "BBB" | while read NAME
> do
> [ "${NAME}" != "BBB" ] && :
> done

22:デフォルトの名無しさん
23/05/13 12:09:39.09 ICgxywxP.net
違う
テストコマンドが非0を返してるから
&&の右辺は評価されてないからそもそもいくつでもない

[ "${NAME}" != "BBB" ] → 偽
[ "${NAME}" != "BBB" ] && : → 偽 && : → 偽
[ "${NAME}" != "BBB" ] && : || true → 偽 || true → 真

23:デフォルトの名無しさん
23/05/13 12:48:14.60 ag/ehtCI.net
返答ありがとうございます。
そして、すみません。意図の記述が不十分でした。

質問の焦点は停止する理由では無く停止する位置です。
左項が0なのは判ってるんですが&& :が無い場合はこの式([ "${NAME}" != "BBB" ])で停止するのに&& :を付けた場合に何故か次(read NAME)で止まるんです。
さらに不可解なのが次行にcontinueを挿入するとループが完遂されてしまいます。

指摘の通り左から解釈されるので最初の式で止まるはずが結果だけ見るとなにか変です。
それで混乱したので質問しました。

24:デフォルトの名無しさん
23/05/13 14:36:20.16 ICgxywxP.net
そもそも仕様として&&や||の左側は-eオプションの判定の対象になってない
だからcmd1||cmd2みたいのを使いたいスクリプトでは-eオプションを使わないorその都度オンオフするみたいな話がよくある
偽を返すテストコマンドがあるとして[ ... ]なら停止するし[ ... ] && trueなら停止しない

それとは別にプロセスの戻り値の話がある
スクリプトはechoとwhile以下をパイプでつないでるけどそれぞれ別プロセスで戻り値がある
do ... doneの中身の最後の行が非0([ "${NAME}" != "BBB" ] && :)ならwhile側のプロセスの戻り値は非0になる(-eオプションの効果で停止する)
continueで終われば戻り値は0になる

25:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch