1 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/08/02(木) 05:22:16.82 .net] シェルスクリプトの総合スレです。 □お約束 ・特記なき場合はBourne Shell(/bin/sh)もしくはPOSIX準拠の互換シェルがデフォルトです。 bash/zsh/ksh/ash/dash/yash/poshなどの専用機能に依存する場合は明示しましょう。 Linuxユーザは/bin/shの正体がbashまたはdashなので特に注意。 FreeBSDユーザは/bin/shの正体がashなので注意。 ・POSIXについてのリンクは https://en.wikipedia.org/wiki/POSIX にまとめられています 最新の仕様はこちらへ pubs.opengroup.org/onlinepubs/9699919799/ (左上の「Shell & Utilities」 から参照することができます。) ・v7 shに一番近くて、現役(?)のshは、OpenSolaris由来のheirloom sh。 src.illumos.org/source/xref/illumos-gate/usr/src/cmd/sh/ heirloom.sourceforge.net/sh.html ・csh/tcshのシェルスクリプトは推奨されません。 (理由は「csh-whynot」でググれ) ・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。 manや参考リンクを見ましょう。 aproposないしはman -kでそれらしい単語による簡単な検索もできます。 ・シェルで使えるワイルドカード等は正規表現ではありません。 正規表現の話題はスレ違い(正規表現スレへ) ・シェルスクリプトのことをシェルってゆうな □初心者へのアドバイス: ・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも awkまたはperlの方が適した
547 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/02/27(日) 09:42:18.76 .net] >>536 シバンでググれ
548 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/02/27(日) 19:45:20.55 .net] なんかbashの仕様のグダグダなところを踏んだって感じだな。 エスケープされていない生の ( は基本的にwordの途中に出てこないので、 w3+( ときたところでsyntax errorになる。 ところが、shopt -s extglob しておくと、 +(hoge|fuga) みたいなパターンマッチを許すため、 w3+( をエラー扱いできなくなり、全部まとめて数式としてパースしてくれる。 *( も可。しかし、/( と -( は不可。 おとなしく $(( )) を使っておくのが吉。
549 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/02/28(月) 06:45:21.62 .net] 自分が理解できないからって bashのせいにするのは恥ずかしい行為
550 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/03/08(火) 18:54:54.29 .net] grepとかで使える正規表現の「\s」は、manページのどこに書いてますか? 「\b」「\w」は、man 1 grepに書いてあるけど、「\s」は見当たらない。
551 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/03/10(木) 22:56:33.04 .net] declare -i n; n="3/2" は通るのに、n="1.5" が通らないのはなぜだろ
552 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/03/10(木) 23:31:05.02 .net] エラーで出ている通り、 リテラルもintegerしかでintegerでは.(5) というのは数値はあり得ない 数値の一部ではないので算術演算子とみるが、算術演算子としてもそんなのない てとこかな
553 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/03/10(木) 23:46:00.98 .net] リテラル じゃなく、右辺中 か >>541 manには無さげかな。manには無いがPOSIXのドキュメントには詳しくある
554 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/03/11(金) 00:08:44.90 .net] >>544 ,541 いや、POSIXのドキュメントには無いな 個々の実装での
555 名前:Cまぐれmanに記載のないのは記載漏れかな 使えるかどうかは試してみなければわからない、使えるのも多いだろうけど 自分で試して使えるなら使うなら、 https://en.wikipedia.org/wiki/Regular_expression https://www.boost.org/doc/libs/1_71_0/libs/regex/doc/html/boost_regex/syntax/basic_extended.html とか、manではなくPOSIXのでもなく他の資料を当たるしかないかな [] [ここ壊れてます]
556 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/03/11(金) 00:14:53.27 .net] ああ、決まり事を規定する団体が規定してるドキュメントでは ユニコードコンソーシアム のがある https://unicode.org/reports/tr18/ これを実装していればだが
557 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/03/11(金) 12:03:17.08 .net] >>544-546 やっぱり記載漏れかな? 理想としては、man 7 regexくらいに全仕様がまとまっててほしいんだけどな。 個人的には、慣れで「\d」を使ってしまって、よく標準コマンド系でガッカリするんだよね。。。
558 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/03/11(金) 12:17:43.20 .net] >>547 他の環境は知らんがGNUのなら仕様はinfoを読めというスタンスだぞ
559 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/03/11(金) 16:00:00.94 .net] >>548 たしかにinfo grepには「\s」が書いてあるな。 でもinfo bashには書かれてなくて、man 3 regexに回されてるような。 結局はinfoでも解決しなさそうな気がするんだけど、違う? info regexだとlibc関数のことが表示されるし、たとえばman 7 regexに相当するinfoは存在しないんでは? まあ、man7セクションに入るような内容はGNUに関係なさそうだとは思う。
560 名前:あぼーん mailto:あぼーん [NG NG.net] あぼーん
561 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/05/12(木) 22:19:26.11 .net] シェルスクリプトの [ -a (AND) と -o (OR) ] は非推奨だかんね https://qiita.com/ko1nksm/items/6201b2ce47f4d6126521 には -a や -o ではなく && と || を使うように書かれています。 否定の場合、 [ $a != $b ] と [ ! $a = $b ] はどちらを使ってもいいのでしょうか?
562 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/05/13(金) 01:22:03.48 .net] >>551 知らなかった。 勉強になった
563 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/05/13(金) 16:01:08.55 .net] >>551 いいんじゃね? ただ [ "$a" != "$b" ] や [ ! "$a" = "$b" ] ってしないとだめだけど あと ! [ "$a" = "$b" ] でもよさそう
564 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/05/14(土) 23:52:35.51 .net] 昔のFreeBSDでは [ -n abc -lt 5 ] みたいのが通った記憶 [ gnu 8.30で今試すとextra argument '[' と怒られる 手元のunix magazineコレクション(1997-2000)にもこの用法が述べられてるが、まあ要らん機能だわな
565 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/05/15(日) 03:02:55.37 .net] シェルスクリプトって息が長いから そういう使うべきじゃないものも残っていて困るね さすがに古すぎる機能は互換性切り捨てた方が良くない?
566 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/05/15(日) 12:09:01.91 .net] whileの、条件が偽でも一度はループって仕様が不思議
567 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/05/15(日) 15:51:51.12 .net] そんな仕様なんて無いし シェルスクリプトに文句言ってるやつの8割は 自分の知らない言語を勉強せずに文句言ってるだけなんだなってわかる
568 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/05/15(日) 17:54:30.30 .net] do while をシェルスクリプトでどう実現するかって話もWeb上であるけど、 それなんの話ってことになるわな
569 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/05/23(月) 13:54:54.31 .net] ぐぐっても見つけられないんだけど functionの中のlocal変数に整数属性付与って出来ないのかな?
570 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/05/23(月) 23:44:52.02 .net] bashの話だとして普通に整数属性付いてるぞ? bash -c 'v=1+2; foo() { local v; declare -i v; v=3+4; echo $v; }; foo; echo $v' 7 1+2 というかdeclareで-gをつけない限り デフォルトでlocalになるだろ?
571 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/05/24(火) 01:33:27.87 .net] ぐぐるな! 黙って man sh
572 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/05/24(火) 17:18:15.58 .net] >>560 ありがとうございます。 declare はスクリプトファイルの先頭でしか使ったことがなかったのでループ内(や関数)でも使えるとは知りませんでした。 なるほど、それならデフォルトlocalですね。 >>561 使い方の例を見て学ぶタイプなので^^
573 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/05/25(水) 00:13:58.24 .net] 3つの引数を必要とする関数があります。 x=$1 y=$2 ANS=$3の絶対値 $3が正の場合はxを、負の場合はyを増減し、xとyとで算出される結果がANSになった時のxまたはyを返します。 x=a[0] y=a[1]とし、最初に$3の符号で添字を0または1に設定することでループ内での場合分けを減らしたいと思います。 質問:整数配列の宣言はできますか?
574 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/05/25(水) 01:04:48.10 .net] >>562 内部的にはlocalとかreadonlyとか変数に属性つけるやつは 内部的にはdeclareかtypesetの別名
575 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/05/25(水) 01:06:31.16 .net] >>563 昨日、近所の吉野家行ったんです。吉野家。 そしたらなんか人がめちゃくちゃいっぱいで座れないんです。 で、よく見たらなんか垂れ幕下がってて、150円引き、とか書いてあるんです。 もうね、アホかと。馬鹿かと。 お前らな、150円引き如きで普段来てない吉野家に来てんじゃねーよ、ボケが。 150円だよ、150円。 なんか親子連れとかもいるし。一家4人で吉野家か。おめでてーな。 よーしパパ特盛頼んじゃうぞー、とか言ってるの。もう見てらんない。 お前らな、150円やるからその席空けろと。 吉野家ってのはな、もっと殺伐としてるべきなんだよ。 Uの字テーブルの向かいに座った奴といつ喧嘩が始まってもおかしくない、 刺すか刺されるか、そんな雰囲気がいいんじゃねーか。女子供は、すっこんでろ。 で、やっと座れたかと思ったら、隣の奴が、大盛つゆだくで、とか言ってるんです。 そこでまたぶち切れですよ。 あのな、つゆだくなんてきょうび流行んねーんだよ。ボケが。 得意げな顔して何が、つゆだくで、だ。 お前は本当につゆだくを食いたいのかと問いたい。問い詰めたい。小1時間問い詰めたい。 お前、つゆだくって言いたいだけちゃうんかと。 吉野家通の俺から言わせてもらえば今、吉野家通の間での最新流行はやっぱり、 ねぎだく、これだね。 大盛りねぎだくギョク。これが通の頼み方。 ねぎだくってのはねぎが多めに入ってる。そん代わり肉が少なめ。これ。 で、それに大盛りギョク(玉子)。これ最強。 しかしこれを頼むと次から店員にマークされるという危険も伴う、諸刃の剣。 素人にはお薦め出来ない。 まあお前らド素人は、牛鮭定食でも食ってなさいってこった。 答え:できまsん
576 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/05/31(火) 05:07:04.68 .net] ありがとうございます。 色々やってみたら、配列として宣言しなくても使えるようです。 declare -i i a[0] a[1] ; a[0]=3 ; a[1]=6 ; i=1 ; a[$i]=${a[$i]}+1 ; echo a=${a[$i]} a=7
577 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/07/31(日) 09:46:48.93 .net] ちょっとスレチかもですが、 for filename in * とかでカレントディレクトリにあるファイル名を得る場合、どんな順番なのでしょうか? ディレクトリエントリ順とか、ファイル名順とか。
578 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/07/31(日) 11:17:31.68 .net] ある程度ファイルがあるところで echo * すればわかる
579 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/07/31(日) 12:25:43.85 .net] >>567 お使いのシェルのマニュアル見ろってさ https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1020788530
580 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/07/31(日) 17:53:21.88 .net] >>567 GLOB POSIXに規定されてる The glob() function shall store the number of matched pathnames into pglob->gl_pathc and a pointer to a list of pointers to pathnames into pglob->gl_pathv. The pathnames shall be in sort order as defined by the current setting of the LC_COLLATE category 名前順
581 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/07/31(日) 17:56:03.40 .net] >>570 ,567 SORTしないというオプションもあるが、その場合には順番の決まりなんてないということになるね
582 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/07/31(日) 19:31:44.03 .net] 質問者の使ってるシェルはposix準拠なのか
583 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/07/31(日) 19:47:57.19 .net] >>572 > □お約束 > ・特記なき場合はBourne Shell(/bin/sh)もしくはPOSIX準拠の互換シェルがデフォルトです。
584 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/08/02(火) 17:31:23 .net] POSIX準拠が当たり前、 POSIXにはない/POSIXで足らない勝手に拡張部分で独自が当たり前 って当たり前がわからないんだろな 拡張するにしてもPOSIXをベース+αって馬鹿でもわかりそうなもんだが 機能的に必要最低限のPOSIXを無視する利益なんてないだろに
585 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/08/02(火) 19:09:16.74 .net] POSIXを無視する利益は互換性でしょ? 今までの動きを変えたらだめ
586 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/08/02(火) 20:31:00.79 .net] >POSIXを無視する利益は互換性 www >今までの動きを変えたらだめ 前段からそれになるとか無茶苦茶 POSIXの経緯、POSIXは何をベースに作られたか勉強してきてから寝言言うんだよ
587 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/08/03(水) 09:45:22.85 .net] 皆様ありがとうございました。シェルはbashです。 名前順的に最後のファイル名を得るには for filename in * ; do : done とするしかないようですね。 でもKDEのDolphineの自然なソート(ゼロパディング分の0を無視)のようなオプションは欲しいかも
588 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/08/03(水) 14:26:27.63 .net] >>577 > 名前順的に最後のファイル名を得るには 普通に ls -r | head -1 でよくね?
589 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/08/03(水) 20:32:58.41 .net] >>576 何をベースにってBSDベースでしょ? SolarisとかはSystemVベースだからtrコマンドの挙動が違う 互換性を重視してPOSIXを無視してる
590 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/08/03(水) 20:34:34.24 .net] https://qiita.com/richmikan@github/items/bd4b21cf1fe503ab2e5c#tr%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89 > POSIXに準拠してないSystem V実装が悪いと言ってしまえばそれまでなのだが、 > 歴史の上ではPOSIXよりも早いのでそれをいうのもまた理不尽というもの。ではどうすればいいか。
591 名前:名無しさん@お腹いっぱい。 [2022/08/04(木) 09:47:52.75 .net] >>576 おら。ちゃんとPOSIXの経緯調べてきたか? 黙ってないでなんとかいえや
592 名前:名無しさん@お腹いっぱい。 [2022/08/05(金) 10:23:52.72 .net] >>577 sh ではできるだけパイプで処理することを考えるんだ もちろん for, while などが必要な局面はあるが パイプで済むなら速くて簡潔でフィルターとして組み合わせられる
593 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/08/05(金) 10:46:42.12 .net] >>582 ファイル名に改行が入る場合はどうすればいいのでしょうか?
594 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/08/08(月) 18:30:05.02 .net] 自分ならまずそういうアホなファイル名を変更するが 権限がなければまあ find -print0 | xargs -0 くらいだな
595 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/08/08(月) 21:06:49.38 .net] >>584 POSIX準拠じゃないので FreeBSDで動きませんw
596 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/08/14(日) 20:39:40.32 .net] POSIX準拠じゃなくてもFreeBSDで動くけどな POSIXにないのでも、ツール間で合わせ合う、どっちかがどっちかに似せるというのは普通にあるしな
597 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/08/14(日) 21:19:42.49 .net] POSIXにないオプションは使用禁止だ そんなものを使うと持続性がなくなる なんらかの理由で別のOSに変更になった時 システムは動かなくなってデータはただのゴミになる 何度言えば理解できるのか
598 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/08/15(月) 12:57:39.48 .net] はいはい、原理主義ごくろうさん 使ってる本人次第でしかないのに押し付けとかホント原理主義者は
599 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/08/15(月) 13:03:07.61 .net] 原理主義者は自惚れてるけど無知さがだだ漏れる 無知さを隠す誤魔化すためのマウント取りでしかない
600 名前:名無しさん@お腹いっぱい。 [2022/08/15(月) 13:26:13.07 .net] リッチー大佐はC言語も使える ただし分割コンパイルやmakeといった高度な機能は使わない そんなものはなくてもシェルスクリプトでmake.shを作れば良いからだ
601 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/08/15(月) 13:28:32.48 .net] >>585 pkg install findutils
602 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/08/15(月) 14:25:12.28 .net] それ入れなくてもFreeBSDのfindで可能だけどな がっつりGNU依存のにしても、それ入れる+ちょっとパス修正だけだわな
603 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/08/15(月) 16:04:55.82 .net] BSDのfindなら find 場所 -print0 | xargs -0
604 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/08/15(月) 20:36:03.11 .net] 持続性なら、もはやPOSIXよりも、Linuxのほうがいいのでは。
605 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/08/16(火) 12:18:54.66 .net] posixってソフトウェア規格でしょ?
606 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/08/16(火) 12:28:09.90 .net] ソフトウェア規格って? 公式ページでも見れば?
607 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/09/19(月) 12:12:56.52 .net] bashの関数で文字列を返したい場合、その関数名を文字列名称に使うことは仕様的に可能ですか? function kotae () { kotae=$1$2 } kotae ab cd echo $kotae
608 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/09/23(金) 09:54:01.90 .net] >>597 関数と変数の名前空間は別なので別に構わない、そして宣言(declare)してなければ変数concはグローバル ややこしいのでそういう使い方のおすすめはしない
609 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/09/23(金) 09:55:09.11 .net] concはkotaeの間違い 頭の中で勝手に命名しちゃった
610 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/09/24(土) 14:46:59.72 .net] >>597 そのようなことをしたい場合はこうする function kotae () { printf -v $1 "%s" $2$3 } kotae ret ab cd echo $ret
611 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/10/28(金) 02:25:37.28 .net] bash 5.2.2(1)で最初の!だけ全角の echo "abc!? xyz!" は通るのに、半角にすると echo "abcecho "abc!? xyz!" > になってしまいます。 一対の"で通すにはどうすればいいのでしょうか? >>598-600 ありがとうございます。 printfのvオプションは初めて知りました。
612 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/10/28(金) 13:13:38.41 .net] ヒストリ機能 知らない/活用してないならオフにしておくべき 対話モードでしか機能しないから切っても特に問題はない
613 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/10/29(土) 10:43:22.22 .net] バックスラッシュをつけてエスケープ。
614 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/11/06(日) 16:47:34.57 .net] 恥を忍んで質問させて下さい: Larry Wallせんせーが書いたmetaconfigが普及せずに、同じ機能を果たす、 Autoconf/Autotoolsが普及した理由って何でしょう? 1)Perlよりm4の方が普及してた(どっちも文法はアレだけど) 2)というかPerl嫌いな人が少なくなかった 3)そのほか(開発モデルとか) ...imakeって何だっけ?
615 名前:名無しさん@お腹いっぱい。 [2022/11/06(日) 18:24:19.31 .net] Autoconf/AutotoolsはGNUだからじゃね?しらんけど
616 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/11/07(月) 01:26:02.31 .net] rsync -avR -e ssh ... rsync -avR -e ssh ... このように6行以上書くとエラーになるんですがどうしてでしょう? ssh: connect to host xxxx: Connection refused rsync: connection unexpectedly closed (0 bytes received so far) [sender] rsync error: unexplained error (code 255) at io.c(228) [sender=3.2.3]
617 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/11/07(月) 06:20:59.25 .net] 6行以上書いたからじゃね?
618 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/11/07(月) 07:38:39.12 .net] >>606 クライアントからの接続要求の処理中に次の接続要求が来たら待たせるようになっててそのバッファが5個だからそれ以上に次々と接続要求きたらConnection refusedを返すようになってる 少し時間を空ければ大丈夫なはず てか、サーバーは何?
619 名前:602 mailto:sage [2022/11/07(月) 11:40:12.51 .net] >>608 ありがとうございます。そうでしたか。 コマンドの内容と関係無さそうだったので迷いました。 接続先のサーバーは自宅のraspiです。
620 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/11/08(火) 09:01:57.74 .net] もしかしてファイル転送を多重化しようとしてるのかな そういうオプションがあったような気がするけどね rsync
621 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/11/08(火) 23:15:42.53 .net] はい、ぶたがみーるー まあ、ここにも俺がいるわけですけどねw
622 名前:名無しさん@お腹いっぱい。 mailto:sage [2023/03/27(月) 06:41:34.11 .net] バックしまーす
623 名前:名無しさん@お腹いっぱい。 mailto:sage [2023/06/18(日) 23:35:36.05 .net] function YesNo { local yn while true; do read -p " [Yes/No" "$1" "]: " yn case $yn in [Yy]*) return 0 ;; [Nn]*) return 1 ;; [Ee]*) if [ ! "$1" = "" ]; then return 2; fi ;; esac done } #main YesNo ":いいえ /Else:その他" echo $? exit 実行すると、read: `:いいえ /Else:その他': 有効な識別子ではありません とエラーになるのですが、どうすればいいでしょうか?
624 名前:名無しさん@お腹いっぱい。 [2023/06/19(月) 06:14:08.74 .net] -p に渡っているのは " [Yes/No" だけで、残りの "$1" と "]: " は yn と同じく変数名として解釈されている read -p " [Yes/No $1 ]: " yn
625 名前:名無しさん@お腹いっぱい。 mailto:sage [2023/06/23(金) 17:18:03.40 .net] テスト
626 名前:名無しさん@お腹いっぱい。 mailto:sage [2023/08/23(水) 21:31:25.96 .net] これってどうしてそうなのだろう?
627 名前:名無しさん@お腹いっぱい。 mailto:sage [2023/08/27(日) 18:57:22.73 .net] readコマンドの引数にダブルクォートを使ってるからだぬ だから>>614 氏が指摘しているコトになってるぬ
628 名前:名無しさん@お腹いっぱい。 mailto:sage [2024/02/20(火) 08:47:58.81 .net] 先にBを算出することもなく変数の追加もなしで処理2を1箇所にすることは可能でしょうか? if [ A ]; then Bを算出 if [ B ]; then 処理1 else 処理2 fi 処理2 fi
629 名前:名無しさん@お腹いっぱい。 mailto:sage [2024/02/20(火) 14:15:04.07 .net] 2度目のエルスを書かなければいいだけじゃなくて?
630 名前:名無しさん@お腹いっぱい。 [2024/02/20(火) 17:32:39.42 .net] >>619 「処理2」は2度処理される必要があるのかもしれん。例えば、ステータスを1 upするような。 出題者はおそらくelse節を冗長処理として、1度きりの処理の意味で「1箇所にする」と要件を定義したのだろう。 が、現実にこんなアバウト野郎のかもす空気を読んでウカウカとelse節を削ると、分かりにくいバグになったりする。 なので、問題を正確に記述しろ糞ボケと回答すべきだと思う。
631 名前:名無しさん@お腹いっぱい。 mailto:sage [2024/02/22(木) 06:05:52.23 .net] >>618 else 足りなくね 処理2を1度または2度実行するのに、1箇所にしたいとかイミフ !Aだったら処理2をする つもりなら、そのまま書けばいいだけだな。シェルスクリプトならw Bを前もって算出できるなら、[ A -a B ] って本人も分かってるだろうが、Bを算出することもなくでも、そのまま書こうと思えばかけるわな、 [ A -a { Bを算出; B; } ] 風に
632 名前:名無しさん@お腹いっぱい。 mailto:sage [2024/02/22(木) 18:42:19.24 .net] { ifを何重にもネストしたブロック } || 処理2 みたいなのでも
633 名前:名無しさん@お腹いっぱい。 [2024/03/14(木) 17:20:13.74 .net] while ...do 処理1 done <<=LIST= リスト1 =LIST= while ...do 処理2 done <<=LIST= リスト1 =LIST= てののリスト1を一つにできんべか。ただし、リスト1全てに対し処理1をし終えてから処理2を行なう必要があるので、 while ...do 処理1 処理2 done <<=LIST= ではあかん。
634 名前:名無しさん@お腹いっぱい。 [2024/03/14(木) 18:05:33.59 .net] ヒアドキュメントの中で変数を展開できます。 LIST_CONTENT="リスト1 ... " while read s; do printf '%s\n' "${s}" done <<LIST ${LIST_CONTENT}" LIST
635 名前:過去ログ ★ [[過去ログ]] ■ このスレッドは過去ログ倉庫に格納されています