18/05/03 18:04:06.88 .net
FAQ
Q. 秘密結社シェルショッカーってなんですか?
A. しらん。どっかの変態団体やろ。近寄らんほうが良い。
Q. USP友の会ってなんですか?
A. しらん。どっかの変態団体やろ。近寄らんほうが良い。
Q. シェル芸ってなんですか?
A. しらん。ヲタ芸みたいなもんやろ。恥ずべきものや。
Q. ユニケージ開発手法ってなんですか?
A. しらん。所でアプリの開発には普通のプログラム言語使ったほうが良いぞ
3:名無しさん@お腹いっぱい。
18/05/03 18:07:31.65 .net
シェルスクリプトの総合スレです。
初心者、学生、アマチュア、プロ、シェルの種類や OS を問いません。
スクリプトのお勉強・自慢・腕試しなどにどうぞ。
まずはテンプレートをご覧下さい。
★A. お約束
1. 特記なき場合は #!/bin/sh がデフォルトです。この場合可搬性に注意し、
Traditional Bourne Shell もしくは、POSIX 相当のスクリプトでお願いします。
bash / zsh / ksh / ash / dash や OS 等に依存する場合は、明示しましょう。
良く分からない方は、使用している OS を書いておけば OK です。是非ご参加下さい。
2. 質問する前に、まず自分で調べましょう。ただし、
「聞くは一時の恥、聞かぬは一生の恥」です。積極的に参加しましょう。
3. 相手を侮辱する発言、失礼な発言は差し控え、知的な議論を楽しみましょう。
4. 他者には様々な環境や事情、目的が有る事に留意し、無下に扱う様な発言は
控えましょう。
★B. お約束の補足
1. Mac OS X では、/bin/sh の実体は bash です。また、一般的に BSD 系 や
GNU/Linux の方は、/bin/sh がシンボリックリンクですので、注意して下さい。
ls (ハイフン)l /bin/sh や readlink -e /bin/sh で確かめて下さい。
2. 可搬性については、下記 F.1 を参照して下さい。
3. POSIX については、man 7 standards や下記 F.2 ( の特に Shell & Utilities )
を参照して下さい。
4. Traditional Bourne Shell とは、UNIX Version 7 から SVR4.2 の /bin/sh を元に
小さなの改変を加え主に商用 UNIX で残されているものです。( 下記 F.3 参照 )
5. Traditional Bourne Shell で入手しやすい sh は、後期 SVR4.0 から派生し、
SunOS 5 / OpenSolaris を経た、Heirloom Bourne Shell です。
SVR4 / SVID3 相当です。同様の Unix utilities も扱っています。
( 下記 F.3 参照 )
4:名無しさん@お腹いっぱい。
18/05/03 18:07:48.98 .net
★C. 初心者へのアドバイス
1. シェルスクリプトのことをシェルってゆーな
2. 知らないコマンドが出てきたら man コマンドで調べましょう。
3. UNIX には、シェルスクリプトに便利な小さなコマンドが色々あります。
apropos ないしは man -k でそれらしい単語による簡単な検索もできます。
4. シェルの構文や内部コマンドは man sh で。英語は LANG=C man shで。
5. 思い通りに動かないときは、まずは #!/bin/sh -x でトレースしましょう。
6. 適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも
awk / perl / javascript / ruby / python 等、他の (スクリプト) 言語の方が
適した処理にはそちらを使いましょう。
7. シェルで使えるワイルドカード等は正規表現ではありません。
正規表現の話題は正規表現スレへ
8. csh / tcsh のシェルスクリプトは推奨されません。理由は下記を参照
URLリンク(www.speech-lab.org)
9. cat file|すんなハゲ
a. 詳細は "Useless Use of Cat" UUOC で検索して下さい
b. 有用な場合も有ります Useful use of cat(1) 英文
URLリンク(www.in-ulm.de)
★D. シェルスクリプトでよく使うコマンド
1. 制御・条件判定系: [, test, expr, true, false, yes, getopts
2. テキスト処理系: cat, awk, sed, tr, sort, uniq, grep, wc, head, tail, cut,
paste, comm, join
3. ファイル検索系: find ( スペースなどを含むファイル名を正しく処理するため、
find は -exec command {} + を推奨。
他に -print0、xargs は -0 オプションという方法もあるが Solaris 非対応 )
4. ディレクトリ系: basename, dirname
5. 出力系: echo, printf
6. 対話コマンド制御系: expect
7. http / ftp の処理自動化: wget, curl
5:名無しさん@お腹いっぱい。
18/05/03 18:08:05.42 .net
★E. 学習用テキスト
1. Bourne Shell自習テキスト ( 1993年 ) pdf お薦め
URLリンク(lagendra.s.kanazawa-u.ac.jp)
(↑サイト消滅かも)
URLリンク(ayapin.film.s.dendai.ac.jp)
2. UNIX FAQ LIST
URLリンク(www.nurs.or.jp)
(3. シェルを使おう - 導入からプログラミングまで - ( 2002年 )
URLリンク(www.netfort.gr.jp) (リンク切れ))
★F. 参考リンク
1. 可搬性関連
a. autoconf マニュアル 移植性のあるシェルプログラム
URLリンク(www.gnu.org)
URLリンク(www.geocities.jp)
b. Portability talk [Bash Hackers Wiki] 英文
Obsolete and deprecated syntax も見る価値有り
URLリンク(wiki.bash-hackers.org)
c. How to make bash scripts work in dash 英文
URLリンク(mywiki.wooledge.org)
d. DashAsBinSh 英文
URLリンク(wiki.ubuntu.com)
e. Portable Shell Programming 英文
URLリンク(www.in-ulm.de)
6:名無しさん@お腹いっぱい。
18/05/03 18:08:24.32 .net
2. POSIX
The Open Group Base Specifications Issue 7 IEEE Std 1003.1, 2013 Edition 英文
URLリンク(pubs.opengroup.org)
3. Traditional Bourne Shell 関連
a. The Traditional Bourne Shell Family History and Development 英文
URLリンク(www.in-ulm.de)
b. BourneShell / Where does the Bourne shell live? 英文
URLリンク(mywiki.wooledge.org)
c. The Heirloom Bourne Shell 英文
URLリンク(heirloom.sourceforge.net)
4. マニュアル
a. The Base Specifications Issue 7, 2013 Edition 英文
URLリンク(pubs.opengroup.org)
b. FreeBSD 日本語マニュアル検索
URLリンク(www.jp.freebsd.org)
c. JM Project (Japanese)
URLリンク(linuxjm.sourceforge.jp)
5. FAQ 等
a. UNIXの部屋 ( 2011年 )
URLリンク(x68000.q-e-d.net)
7:/unix/ b. Linux JF (Japanese FAQ) Project http://linuxjf.osdn.jp/ c. Advanced Bash-Scripting Guide 英文 http://www.tldp.org/LDP/abs/html/ d. Unix Programming FAQ 日本語訳 ( 2000年 ) http://www.race.u-tokyo.ac.jp/~moro/unix-programmer/
8:名無しさん@お腹いっぱい。
18/05/03 18:08:40.89 .net
6. ツール
a. web tool です。Vim syntastic や Emacs の Flycheck でも使えます
ShellCheck
URLリンク(www.shellcheck.net)
b. vim 用 syntastic
URLリンク(github.com)
c. checkbashisms も使用してチェック duggan/shlint GitHub
URLリンク(github.com)
★G. 前スレ
1. ☆シェルスクリプトを勉強するにあたって☆
スレリンク(unix板)
2. 便利なシェルスクリプト見せろ
スレリンク(unix板)
3. シェルスクリプト総合 その1
スレリンク(unix板)
後略。検索して下さい
9:名無しさん@お腹いっぱい。
18/05/03 18:08:56.47 .net
★H. 関連スレ(UNIX板/プログラム板)
1. sed
スレリンク(unix板)
2. 正規表現
スレリンク(unix板)
3. Regular Expression(正規表現) Part13
スレリンク(tech板)
4.Perlについての質問箱 64箱目 [転載禁止](c)2ch.net
スレリンク(tech板)
5. ECMAScript デス 4
スレリンク(tech板)
6. Ruby 初心者スレッド Part 57©2ch.net [転載禁止](c)2ch.net
スレリンク(tech板)
7. Pythonのお勉強 Part50
スレリンク(tech板)
8. 【node.js】サーバサイドjavascript 3【io.js】(c)2ch.net
スレリンク(tech板)
★I. 現在評価待ち: X.n は予定した追加先。主にスレ立て人の判断保留用。
10:名無しさん@お腹いっぱい。
18/05/03 18:10:52.76 .net
★え?Windowsでシェルを!?
Bash on Ubuntu on Windows©2ch.net
スレリンク(win板)
Win10がBash・linuxコマンドに公式ネイティブ対応★3 [無断転載禁止]©2ch.net
スレリンク(win板)
【Bash】Windows Subsystem for Linux【Ubuntu】2©2ch.net
スレリンク(linux板)
Bash for Ubuntu for Windowsで開発しようぜ! [無断転載禁止]©2ch.net
スレリンク(prog板)
11:名無しさん@お腹いっぱい。
18/05/03 18:32:16.95 .net
乙
落ち着いたスレになりますように
12:名無しさん@お腹いっぱい。
18/05/04 01:42:33.99 .net
シェルスクリプトの勉強をしたいです
WindowsよりMacの方がいいんですかね?
13:名無しさん@お腹いっぱい。
18/05/04 02:42:43.21 .net
今Windows使ってるならその上で環境作った方が楽だと思うけど
わざわざMac買ったって他のことで苦労するよ
14:名無しさん@お腹いっぱい。
18/05/04 05:30:58.55 .net
>>12
ありがとうございます
今Windowsでvirtualboxにubuntu入れてやっているんです
Macだと仮想環境じゃなくてその物がUNIXだから勉強するにはもっといいかなと思ったんです
職場が今年からMacになってしまいましたし
15:名無しさん@お腹いっぱい。
18/05/04 08:56:52.55 .net
手始めにbashの入力履歴を自在に編集できるスクリプト組んでごらん
16:名無しさん@お腹いっぱい。
18/05/04 12:11:06.16 .net
Windows 10ならWSLでUbuntuがほぼそのまま使えるやん
17:名無しさん@お腹いっぱい。
18/05/04 12:37:28.42 .net
WSLってちゃちな玩具みたいなもんだろ
あんなもの使ってる奴がここにいるのか?
そもそろWindows10て
18:名無しさん@お腹いっぱい。
18/05/04 15:36:37.70 .net
>>16
使えるよ
いままでcygwin入れてたけど、代わりに使ってる。
最近はちゃんと動くし、
cygwinよりはちゃんとしてるから色々使いやすい。
飽くまでもローカルでのツール的な使い方でね
あとはGimpとかわざわざWin32版を使ってたようなものもそうする必要語なくなった。
サーバで動かすようなものを作る場合はちゃんとlinuxネイティブの環境でコンパイルから動作確認までする。
19:名無しさん@お腹いっぱい。
18/05/04 16:42:49.37 .net
>>16
WSLがおもちゃじゃないと認めるにはなにが必要?
多分すでに実現できてると思うけどさ
20:名無しさん@お腹いっぱい。
18/05/06 17:57:39.06 .net
このスレの親だっけか。aliasが便利っていうレスがあったけど、確かにそうだわ。
とりあえずalias NOP=':'として明示的に「何もしない」命令を作れる。
NOP() {:}より作るのが楽。
21:名無しさん@お腹いっぱい。
18/05/06 18:51:19.88 .net
"NOP" 3文字
":" 1文字
22:名無しさん@お腹いっぱい。
18/05/07 01:43:43.81 .net
>>20 ←こういう奴ってオブジェクト指向とか理解できなさそう。
「クラス作るとかコードが長くなるだけじゃん」とか言って。
23:名無しさん@お腹いっぱい。
18/05/07 02:20:08.19 .net
個人的にはnopより:の方が直感的に理解できる
24:名無しさん@お腹いっぱい。
18/05/07 02:40:25.27 .net
シェルスクリプトにオブジェクト指向とか言い出す方がTPOをわきまえないトンチンカンだけどな
シェルスプリプトもオブジェクト指向な言語(?)になればいいね。いや、C言語が未だに基盤としては唯一なのと同じで必要としてない、されてないか
25:名無しさん@お腹いっぱい。
18/05/07 06:45:58.87 .net
>>23
PowerShell
26:名無しさん@お腹いっぱい。
18/05/07 07:46:31.93 .net
素人の頓珍漢な質問だと思います。すいません。
$ echo "$$" | echo "$(cat), $$"
とすると、
n, n
といったように同一の番号が表示されますが、これは正当な挙動なのでしょうか。
$$には現行コマンドのPIDが入っているとマニュアルで読んだのですが、なぜ違うコマンドが同じPIDを持っているのでしょうか……。
27:名無しさん@お腹いっぱい。
18/05/07 08:16:27.82 .net
なんのマニュアルか知らんけど違うよ。シェルのPID。なので同じなのは当然
ps
ってしてみりゃ、そのPIDがそのシェルのPIDってわかるっしょ
($$にも問題あって、より正確には$BASHPIDの方がだけど)
28:名無しさん@お腹いっぱい。
18/05/07 08:41:25.61 .net
BASHPID
Expands to the process ID of the current bash process. This
differs from $$ under certain circumstances, such as subshells
that do not require bash to be re-initialized.
29:名無しさん@お腹いっぱい。
18/05/07 08:48:03.06 .net
ディレクトリ→オブジェクト
実行ファイル→メソッド
テキストファイル→プロパティ
シンボリックリンク→継承、委譲
30:名無しさん@お腹いっぱい。
18/05/07 10:22:35.44 .net
>>19
なにが楽なのかよくわからない
alias NOP=:
NOP() { :; }
31:名無しさん@お腹いっぱい。
18/05/07 10:25:40.68 .net
>>23
シェルスクリプトはオブジェクト指向言語ではなくて
関数型言語だからなぁ
標準入力からの配列(複数の行)を入力して
フィルタかまして標準出力に出力する
この動きがメインとなってる
32:名無しさん@お腹いっぱい。
18/05/07 12:56:16.64 .net
構造体も配列もない言語で、そんな複雑なデータ構造使うプログラム書いちゃいかん。
そういうのは他の言語に任せて、シェルスクリプトはその間のグルーに徹するようにしないと保守不能になる。
33:名無しさん@お腹いっぱい。
18/05/07 16:38:07.46 .net
>>31
おじさん誰にレスしてんの?
34:名無しさん@お腹いっぱい。
18/05/07 18:26:06.42 .net
>>31
配列あるよ?POSIXシェルにはないんだっけ?
35:名無しさん@お腹いっぱい。
18/05/07 19:03:39.00 .net
少なくとも ksh で配列を使ったことはあるなあ。
36:名無しさん@お腹いっぱい。
18/05/07 21:25:39.68 .net
>>33
POSIX仕様にある配列は $@ だけでしょ。
>>32
シェルでオブジェクト志向って言ってる人。
関数型風に書ける範囲内で関数型風に書くのは構わないと思う。
ただしBourneシェルを関数型言語だ等と主張したら、関数型言語の専門家に鼻で笑われるのは必至だな。
37:名無しさん@お腹いっぱい。
18/05/07 21:27:58.28 .net
オブジェクト志向じゃない、オブジェクト指向だ、すまん。
なんで変換ミスって送った直後に気づくんだろうなあ。
38:名無しさん@お腹いっぱい。
18/05/08 03:13:56.60 .net
オブジェクト指向云々は、多分、
名前重要って事を言いたかったんだと思うよ
39:名無しさん@お腹いっぱい。
18/05/08 03:29:14.73 .net
たぶん>>21はオブジェクト指向の文脈で名前の付け方の重要性を知って
んで、その前提でオブジェクト指向って単語を出したんだろうけど
他の人はその前提を共有してないから、シェルでオブジェクト指向(笑)となって
挙句関数型だの尾ひれはひれに揚げ足取りするに至ったと憶測しました
40:名無しさん@お腹いっぱい。
18/05/08 03:39:56.61 .net
納得した
41:名無しさん@お腹いっぱい。
18/05/08 04:42:22.78 .net
>>37,38
それは知っていてのだったがな
そこここにはそれ流があると思うよ。LinuxとかBSDのソース見たらいまだにC流で短かったりするし。シェルスクリプトなら>>20っていう意見があってもいいだろう、そもそもいろいろ記号的なもんだから
なのにいきなりオブジェクト指向とか言い出し馬鹿にするのがTPOをわきまえない馬鹿だなっていう
シェルスクリプトがオブジェクト指向ならそれはそれでオブジェクト指向言語というかそれでのフレームワークなどでの名前付け方がってのはわかるけど
42:名無しさん@お腹いっぱい。
18/05/08 06:28:52.79 .net
名前に拘るならNOPも略さずにNoOperationで
43:名無しさん@お腹いっぱい。
18/05/08 08:53:21.78 .net
名前の長さとオブジェクト指向は独立した話だからなあ。
オブジェクト指向って言うからにはクラスか、あるいは型のプロトタイプか、どっちかは必須だろう。
44:名無しさん@お腹いっぱい。
18/05/08 09:49:10.08 .net
>>38
あまりにも的確な分析にワロタ。まさか御本人様ですか?w
まあ文字だけのコミュニケーションだといろいろと伝わりにくいことが多いから、お互い気を付けないとね。
45:名無しさん@お腹いっぱい。
18/05/09 20:50:52.59 .net
秒を分に変更するにはどんなコマンドを使ったらいいですか?
3000という文字があったとして、50にしたいです
date -d "3000" +"%M"だとダメでした
46:名無しさん@お腹いっぱい。
18/05/09 21:22:02.94 .net
$(( 3000 / 60 ))
`expr 3000 / 60`
普通に算術で
47:名無しさん@お腹いっぱい。
18/05/09 21:32:59.67 .net
date使ってもある意味無理やりなのは、
Linux
date -d "@3000" +"%M"
BSD
date -r 3000 +%M
>>44 は@が抜けてる
48:名無しさん@お腹いっぱい。
18/05/09 21:34:52.98 .net
>>45
>>46
どうもありがとうございます!!
49:名無しさん@お腹いっぱい。
18/05/09 22:11:38.47 .net
date -d "@3000" +"%M"
これだと、59分以上を表せなかったです。
50:名無しさん@お腹いっぱい。
18/05/10 00:27:18.20 .net
まあ、算術コマンド使ったほうがいいわな。
51:名無しさん@お腹いっぱい。
18/05/10 00:34:52.62 .net
>>49
そうだね。
$ echo 3000/60 |bc
50
$ echo 4000/60 |bc
66
52:名無しさん@お腹いっぱい。
18/05/10 01:12:34.32 .net
だんだん数値が大きくなっていって閏年で悩むんだろうなあ
53:名無しさん@お腹いっぱい。
18/05/10 03:16:11.29 .net
dc -e '3000 60 / p'
54:名無しさん@お腹いっぱい。
18/05/10 16:08:46.44 .net
>>50
bcのマニュアル読もう!
$ printf '%.0f\n' "$(echo '4000/60' | bc -l)"
67
55:名無しさん@お腹いっぱい。
18/05/10 16:49:23.89 .net
>>53
えっ、今回の要件は「商」を計算したいのだと思ったけど。
秒を分に変換するのに、勝手に四捨五入したらダメだろ
56:名無しさん@お腹いっぱい。
18/05/10 19:04:07.72 .net
仕様が不明です
57:名無しさん@お腹いっぱい。
18/05/10 20:04:02.04 .net
好きに解釈して脱線レスを繋げるスレ
58:名無しさん@お腹いっぱい。
18/05/17 08:37:52.41 .net
すいません。
いま、誤ってログインシェルの設定ファイル(~/.bashrc)を空にしてしまいました。
しかし、まだログアウトしていないため、今稼動しているシェルはその設定を保持しています。
例えばエイリアスを知りたければ`alias`とやればいいはずですが、ほかにもシェル関数や環境変数なども読み込んでいます。
これらの値を今取得するにはどうすればいいですかね。
59:名無しさん@お腹いっぱい。
18/05/17 08:57:58.08 .net
>>57
set
環境変数とシェル関数(posixモードの場合は変数のみ)
set -o
オプション設定のon/off状態
60:名無しさん@お腹いっぱい。
18/05/17 08:58:54.79 .net
変数はsetとかprintenv
関数知らん
61:名無しさん@お腹いっぱい。
18/05/17 10:41:31.20 .net
関数はtypeで返ってくるんじゃない?
62:名無しさん@お腹いっぱい。
18/05/17 10:46:38.47 .net
関数はsetで出てこね?
printenvなんてあったのね。env使ってた。diffってみたが違いがわからんな。printenvの意味を後で調べてみよう
63:57
18/05/17 11:04:55.79 .net
みなさまありがとうございます。
set -oおよびprintenv(これはenvと同じ出力でした。なんとなくprintenvを使いました)でかなりの部分を取り戻すことができました。
ただ、set -oで出力されるオプション設定の項目数が少ないように思うんだけども、どうなんですかね。
allexport off
braceexpand on
emacs off
errexit off
errtrace off
functrace off
hashall on
histexpand on
history on
ignoreeof off
interactive-comments on
keyword off
monitor on
noclobber off
noexec off
noglob off
nolog off
notify off
nounset off
onecmd off
physical off
pipefail off
posix off
privileged off
verbose off
vi on
xtrace off
なお、これらの内allexportやxtraceなどは設定した覚えがありません。システム設定(/etc/bash.bashrcあたり)でも設定されてません。不思議です……。
厚かましいのですが、できれば全てのオプションの状態を把握したいです。
64:57
18/05/17 11:06:15.20 .net
すいません。shoptで行けました。ほとんど修復できました。感謝します。
65:名無しさん@お腹いっぱい。
18/05/17 13:23:11.51 .net
>>63
っていうか、バックアップから.bashrcを拾って戻せるようにしておきなよ
言われなくても百も承知だろうけど、バックアップは大事だよ
66:名無しさん@お腹いっぱい。
18/05/17 13:36:50.52 .net
>>64
ですよね……。
なぜかバックアップとシンボリックリンクを張るという馬鹿な真似をしてました。
それはもうバックアップとは言わねぇか。
次にパソコンを買った時はLVMやらで柔軟なパーティションを組んでやります
67:名無しさん@お腹いっぱい。
18/05/17 15:18:16.60 .net
ドットファイルみたいにちょくちょく書き換えしててなくなると困るファイルは
RCSなんかで管理しとくといいんじゃない?
68:名無しさん@お腹いっぱい。
18/05/17 17:13:16.93 .net
RCSとか石器時代かよ
69:名無しさん@お腹いっぱい。
18/05/17 19:40:33.27 .net
SCCSですよね
70:名無しさん@お腹いっぱい。
18/05/17 19:43:19.47 .net
>>66
ホームぶっ飛ばしたバカを見たことがある。 多分 rm -fr ./work を rm -fr . /work って打ったんだろう。
71:名無しさん@お腹いっぱい。
18/05/17 19:48:04.21 .net
rm -rfは本当に怖いな
72:名無しさん@お腹いっぱい。
18/05/19 07:42:41.44 .net
★★★共産●主義者とは言葉の通じない赤犬であり、決して人間と見なしてはならない!時たま本当らしいことを言うとしても、それはより大きな嘘を覆い隠す為の罠である。★★★
● この掲示板(万有サロン)に優秀な書き込みをして、総額148万円の賞金をゲット●しよう!(*^^)v
URLリンク(jbbs.livedoor.jp)●29/ →リンクが不良なら、検索窓に入れる!●
73:名無しさん@お腹いっぱい。
18/05/21 09:50:43.86 .net
/home直下にhoge00~hoge99までの名前がついているディレクトリがあるとします
他にも/home直下にはディレクトリが存在します
ディレクトリ名を検索しながら、hoge00-hoge99の名前にマッチした複数のディレクトリの中の、ある特定のディレクトリに既存のファイルであるtestという名前のファイルをコピーしたいです
ある特定の、という意味は
・hoge○○ディレクトリ直下にtestというファイルがあったら→スルー
・testというファイル名のファイルがhoge○○直下になければ、既存のtestを該当hoge○○ディレクトリ直下にコピー
このようなシェルスクリプトを書きたいのですが教えてください
74:名無しさん@お腹いっぱい。
18/05/21 09:55:33.18 .net
forで回してifで分岐してcpするだけだと思うけど、
自分ではどこまでできてんの?
75:名無しさん@お腹いっぱい。
18/05/21 10:02:06.88 .net
>>73
ifとcpは使うんだろうなと思っていました
forもやはり必要そうですね、、
76:名無しさん@お腹いっぱい。
18/05/21 10:09:07.33 .net
それを使わずにどうやろうというんだ
要するに連番ディレクトリに全てtestファイルがあるようにしたい、ただし既存のtestファイルは上書きしない、でいいのか
77:名無しさん@お腹いっぱい。
18/05/21 10:10:59.07 .net
>>75
全くおっしゃる通りです
78:名無しさん@お腹いっぱい。
18/05/21 10:19:49.89 .net
filehoge="test"
[ ! -f "$filehoge" ] exit 1
seq -f 'hoge%02g' 1 99 | while read hogedir
do
[ -d "$hogedir" ] && [ ! -f "$hogedir/$filehoge" ] && { cp "$filehoge" "$hogedir"; echo "copied into $hogedir"; }
done
79:名無しさん@お腹いっぱい。
18/05/21 10:20:58.69 .net
seq -f 'hoge%02g' 0 99
の間違い。00からなので
80:名無しさん@お腹いっぱい。
18/05/21 10:25:03.40 .net
>>77
>>78
もの凄く高度ですね…
自分には理解できるかわかりませんがじっくり読ませてください
ありがとうございます
81:名無しさん@お腹いっぱい。
18/05/21 10:38:02.84 .net
お題として遊ぶなら、findしてexec内でやっつけるとかかな
82:72
18/05/21 10:39:59.27 .net
自分はfindを使うやり方を考えていました
83:名無しさん@お腹いっぱい。
18/05/21 10:42:46.03 .net
findは存在を確認するのは楽だろうけど、存在しないことを確認するのは面倒じゃない?
84:名無しさん@お腹いっぱい。
18/05/21 10:50:09.46 .net
>>77
[ ! -f "$filehoge" ] && exit 1
の間違いもあった。&&抜けてた、すまん。
>>79
ん?まあ、for(forはアレでアレの回避があったような気がするがすぐ忘れる。 | while read hoge しか使わないので) と if(明示するだけだけど)で書けばいいよ
...
for hogedir in $(seq -f 'hoge%02g' 1 99)
...
if [ -d "$hogedir" ] && [ ! -f "$hogedir/$filehoge" ]; then
cp "$filehoge" "$hogedir"
...
fi
85:名無しさん@お腹いっぱい。
18/05/21 10:57:49.03 .net
あー、" で括るだけか。アレの場合も
for hogedir in "$(seq -f 'hoge%02g' 1 99)"
が、よりかな
86:名無しさん@お腹いっぱい。
18/05/21 11:19:28.01 .net
やっぱりダメなのかな??
touch 'hoge 01';touch 'hoge$02'
for name in "$(/bin/ls -1)"
/bin/ls -1 | while read name
やっぱforはメンドクサイから、安心簡単な while でいいやっ
87:72
18/05/21 12:04:38.46 .net
>>82
考えるのに役立つアドバイスありがとうございます
>>83>>84>>85
更新してくださりありがとうございますm(_ _)m
読ませていただきます
88:72
18/05/21 12:08:42.09 .net
初心者ですが面白くなってきました
今日中に仕上げられるよう頑張ります
89:名無しさん@お腹いっぱい。
18/05/21 12:31:18.57 .net
楽しめるうちにたくさん学習しておくんだぞ
90:名無しさん@お腹いっぱい。
18/05/21 15:08:37.35 .net
>>82
それはexecの中でやればいいんじゃ
お題とは別に、存在しないことの確認だけだったら、
検索条件に入れればいいだけだし
91:名無しさん@お腹いっぱい。
18/05/21 18:16:23.91 .net
質問です。
シェルスクリプトファイルを実行する方法として
1. 利用者に応じた実行権限を賦与する
$ chmod +x scriptfile.sh
$ ./scriptfile.sh
2. sh(1)コマンドの引数として実行する
$ sh scriptfile.sh
という方法がありますが,どちらがより良いか教えてください(というかスクリプトの実行結果自体にはたして違いはあるのでしょうか)。
今まで一つ目の方法しか知りませんでしたが,もし二つ目になんら欠点がなければよりコマンドの数が少ない
(極端に言えばchmod(1)コマンドがなくてもできる)後者の方法を使っていきたいです。
どうかよろしくおねがいします。
92:名無しさん@お腹いっぱい。
18/05/21 18:37:27.68 .net
psで見てみ。1 でも、そのシェルスクリプトファイルのシバン(*1)で指定したインタプリタ(シェル)を、引数としてそのシェルスクリプトファイルをで起動してるから
1はコマンド、2はスクリプトファイルっていう違い。/usr/binなどの中のコマンドでも実態はシェルスクリプトやPerlスクリプト等なのがあるけど、そんなの気にしてない気づいてなくコマンドとして使ってたりするだろ?
まあ、コマンドとして必要じゃない(コマンドの数が少ないって意味がわからんが一時的とかか?)んだったら、別にスクリプトファイルとしてで全然普通
1) お約束事項のような
#!/bin/sh
もう俺は気にしてなくて
#!/bin/bash
だけど
93:名無しさん@お腹いっぱい。
18/05/21 19:05:05.59 .net
使い捨てか頻繁に使うか
94:名無しさん@お腹いっぱい。
18/05/21 19:18:46.42 .net
>>82
hogefile="test"
find . -maxdepth 1 -type d -name 'hoge[0-9][0-9]' -exec bash -c "test -f {}/$hogefile || cp $hogefile {}" \;
こんな感じとか?俺は、俺も、そうはしないけど。-exec は使ったことないのでどこまでできるのかよくわからんな。なのでbashスクリプトにした/逃げた
95:名無しさん@お腹いっぱい。
18/05/21 19:23:57.41 .net
>>91
ありがとうございます。
ps(1)コマンドで確認したところ,たしかに両方ともにシェルが始めに起動されていました。
(素朴な疑問なんですが,PIDが連続しているのは偶然ですか? 原理的に必然ですか?)
1の方法だと一見シェルは起動されていないように見えるけれども,シバンに書かれたシェルがまず起動するということですね。
ということは全く違いはないという理解でよいでしょうか。
>>92
なるほど。1の方法は永続的,2の方法は試験目的で一時的に作ったファイルなどに対し用いるということですね。
96:名無しさん@お腹いっぱい。
18/05/21 19:38:22.80 .net
シェルプロセスが勝手に起動されるか明示的に起動するかで、なんかあった(rcやprofileを読まないとか起動時の環境設定の動作)が今回のようなのは関係ないだろう、気にすんなw
PIDはだいたい普通にインクリメント。なにかプロセスが起動するごとにそれの新しいPIDはインクリメントされた値かな
97:名無しさん@お腹いっぱい。
18/05/21 22:42:20.13 .net
OSによってはセキュリティ的な理由でPIDをある程度ランダムに割り当てるので連続にはならない。
BSD系はどれもデフォルトだとランダムじゃないかな。
98:名無しさん@お腹いっぱい。
18/05/21 23:07:13.46 .net
PIDが若いから特権があるわけでもないしPIDが推測しやすいからっていうセキュリティ懸念ってなんだろ?
99:名無しさん@お腹いっぱい。
18/05/21 23:36:33.95 .net
cat >/tmp/tmpfile.$$
みたいに手抜きな一時ファイル作成してると
シンボリックリンク攻撃くらうからそのリスクを減らせたりする。
ちゃんと攻撃避ける正しい書き方してれば関係ない話だけど、
世の中にテキトーなスクリプトは尽きないから。
100:名無しさん@お腹いっぱい。
18/05/21 23:39:26.38 .net
なるほど。OSのセキュリティではなくPIDを利用したナニかに対するか
101:名無しさん@お腹いっぱい。
18/05/21 23:43:34.05 .net
ん?PIDを知ることができる(当然知ることは普通にできる)ってとこがキモで推測しやすいのとは別のような。まあ、いいや、ナニかあるなってことで
102:名無しさん@お腹いっぱい。
18/05/21 23:47:30.91 .net
ああ、シンボリックリンク攻撃を誤解してた。事前に(大量に)シンボリックリンク作ってしまうわけね。なるほど
103:名無しさん@お腹いっぱい。
18/05/22 02:34:29.36 .net
知り合いから教えてもらったパソコン一台でお金持ちになれるやり方
時間がある方はみてもいいかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』
GXGZT
104:名無しさん@お腹いっぱい。
18/05/22 12:13:09.28 .net
シンボリック攻撃ってシンボリックリンクを作成する時にパーミッション関連の隙を突いて本来保護されているコマンドを改竄することだよね。
大量に作成する必要なないんじゃないかしらん。もちろんある種の陽動にはなるだろうけど。
105:72
18/05/22 19:13:09.08 .net
>>77>>78
これで一発で成功しました
驚いています
このコードをもっと理解すると共に、自分も先輩のようなプログラマーになれるよう勉強を続けていきたいです
マジで助かり、勉強になりました
本当にありがとうございました
106:72
18/05/22 23:19:32.73 .net
もちろん>>83の修正も加えさせていただきました
コードをくだすった方と同じ方かはわかりませんがそもそも>>75でこちらの仕様を把握してくださったのがすごい
要求仕様、要件定義の大切さも少しわかりました
そしてコードはこちらの望む通りの結果を出して一発で動きましたよと
107:名無しさん@お腹いっぱい。
18/05/22 23:39:50.60 .net
>>105
別人だ。俺はスマホだからここにコードは書けん
108:72
18/05/22 23:57:04.16 .net
>>106
そうでしたかm(_ _)m
いずれにせよスレの複数の先輩方にお世話になりました
しかも勉強になります
109:名無しさん@お腹いっぱい。
18/05/23 03:10:49.54 .net
あのなぁ、お前さんここをどこの板だと思っているんだい?
歴史あんだぜ
まあその話はもうほんとに一昔前の出来事になっちまったけどな
110:名無しさん@お腹いっぱい。
18/05/23 04:11:43.99 .net
イザナミだ
111:名無しさん@お腹いっぱい。
18/05/23 10:26:18.02 .net
伝説って?
112:名無しさん@お腹いっぱい。
18/05/23 10:49:34.46 .net
なんだったか、2chの鯖に関する貢献があったような
当時からいたわけじゃないからどっかのサイトで知った話だが
Flash黄金期にその話がFlash化されてたから見て知ったな
113:名無しさん@お腹いっぱい。
18/05/23 12:29:35.00 .net
read.cgiの改良作業だよね。
直
114:接関わってはいないけど、当時はリアルタイムで見ていたし、手元の どこかに運営から住民に開示されたread.cgiも残ってると思う。 アクセスが増えて通信量が増加して、当時借りてたホスティング業者から 追い出されそうになってたんだけど、HTTPの通信をgzipで圧縮して通信量を 削減しようという話だったかと思う。 ただ、UNIX板でも話をして作業には参加していたものの、プログラム板と かの方でもガリガリやっていたような記憶がある。
115:名無しさん@お腹いっぱい。
18/05/23 14:05:37.49 .net
それとは別に SYN flood 攻撃に対し SYN cookie 有効化で対抗した時はUNIX板で主に議論してた気がする。
リアルタイムで見てたというか発言してたけど(SYN cacheと比較した得失とか書いた気が)、
こういうのはあくまで個人としての行動なので板自慢に繋げるのは好きじゃないな。
むしろ統一とかとれてなくてカオスなのが5chの良いところだと思うので。
116:名無しさん@お腹いっぱい。
18/05/23 15:36:26.79 .net
>>112
gzip圧縮ってapacheの設定じゃないの?
117:名無しさん@お腹いっぱい。
18/05/23 21:48:48.59 .net
他の顧客がいるからミドルウェアで圧縮できない、というホスティング屋を使っていたんじゃなかったのかな(後から知った話だから、違うかもしれない)
118:名無しさん@お腹いっぱい。
18/05/23 23:46:31.17 .net
オイスター作戦ね
もう15年は前でしょ
119:名無しさん@お腹いっぱい。
18/05/24 00:55:41.47 .net
>>113
新ブラッドなつかしす
120:名無しさん@お腹いっぱい。
18/05/24 07:58:22.34 .net
馴れ合いならよそでやれ(キリッ)
121:名無しさん@お腹いっぱい。
18/05/24 08:33:06.96 .net
なれ合いですらなくて、おっさんが勝手に郷愁に浸ってるだけという。
122:名無しさん@お腹いっぱい。
18/05/24 20:05:30.06 .net
$ cat a.file > b.file
とやるのと
$ cp a.file b.file
とやるので違いが生じる場合はありますか?
123:名無しさん@お腹いっぱい。
18/05/24 20:22:49.22 .net
>>120
パーミッションがどうのこうの
124:名無しさん@お腹いっぱい。
18/05/24 21:28:22.51 .net
>>120
b.fileというディレクトリがあった場合の動作
125:名無しさん@お腹いっぱい。
18/05/24 22:42:29.15 .net
ディレクトリの場合はケツに / つけろや
126:名無しさん@お腹いっぱい。
18/05/24 23:23:09.46 .net
イミフ
127:名無しさん@お腹いっぱい。
18/05/24 23:30:13.33 .net
>>123によると
cat a.file > b.file/
ってやるといいんだって
128:名無しさん@お腹いっぱい。
18/05/25 00:17:51.08 .net
意図してディレクトリじゃないからつけろもなんもないのにな
129:名無しさん@お腹いっぱい。
18/05/25 10:57:24.97 .net
>>120
CoWが効いたり
130:名無しさん@お腹いっぱい。
18/05/25 10:59:54.02 .net
そんなcpの実装ってある?
131:名無しさん@お腹いっぱい。
18/05/25 11:34:57.95 .net
Linuxのは実装はしてるみたいだな。デフォではないから話の流れでの実装してるとは言えんけど
132:名無しさん@お腹いっぱい。
18/05/25 14:50:09.69 .net
シェルスクリプトの勉強をするのにおすすめの本はありますか?
133:名無しさん@お腹いっぱい。
18/05/25 15:20:37.79 .net
最近あったな
スレリンク(unix板:900番)-902
134:130
18/05/25 16:54:14.54 .net
>>131
ありがとうございます
135:名無しさん@お腹いっぱい。
18/05/26 04:09:24.19 .net
お知恵お借りしたいです。
awk '($3 !~ /ここにパイプ区切りで記述したい/) && ($4 ~ /01/)' output.txt
上記のawkで条件に当てはまるファイルを絞り込みたいのですが
その1 別ファイルからのawkの結果を $aaa に設定してある
その2 $aaa は複数列の出力なので set コマンドにて位置パラメータに分けてある
その3 各変数を展開して文字列としてパイプで区切ってawkを使いたい。
以上のようなことをやってみたのですがどうもうまく行きません。
また、違うやり方もあるようでしたらご教示いただけるとありがたいです。
よろしくお願いします。
136:名無しさん@お腹いっぱい。
18/05/26 04:35:42.94 .net
> $aaa は複数列の出力なので set コマンドにて位置パラメータに分けてある
これはどういう意味? set はシェル自身の設定だと思うんだけども
137:名無しさん@お腹いっぱい。
18/05/26 05:07:26.79 .net
cat ZZZ.txt |grep XXX
hoge
fuga
と複数行でしたので
aaa=$(cat ZZZ.txt |grep XXX) としてみました。
そして set $aaa と設定して
$1 $2 $3 ...と変数が自動で割り振られるなら増減しても対応できるのでは考えました。
(本来は0個のときもあるのでそれも考慮しなければならないんですが)
そして $1 等に入っている変数(hogeやfuga) を展開してパイプで区切れれば動くと思うんです。
138:名無しさん@お腹いっぱい。
18/05/26 07:13:03.91 .net
ごめん俺の理解が悪いと思うのだがあなたのやりたいことが見えない。
他の人にまかせるわ。
もしくはZZZ.txtの内容をプライバシーに障らない程度に具体的に教えてほしい。
「ZZZ.txtからgrepで取り出した値をパイプで連結して処理する」という文言からは
ZZZ.txtには命令が一行ずつ書かれているように受け取れるのだが、そうじゃないよね。
それとも「パイプで繋ぐ」というのはシェルのパイプ実行ではなく単に文字列としてパイプを区切りとして使うという意味?
もしそうなら
$ cat ZZZ.txt | grep XXX | tr '\n' '|' | sed 's/|$//1'
↑こういうので行けるけど。違うでしょ?
139:名無しさん@お腹いっぱい。
18/05/26 07:35:37.60 .net
説明がヘタですみません。ZZZ.txtの中身はyoutube等の
URL タイトル 日付 がタブ区切りで複数行書かれているファイルです。
123.com hoge 02
456.com fuga 05
789.com peke 08
のような感じです。
それらから条件から当てはまる行や列を抜き出してパイプ区切りにしたいのです。
パイプの解釈は hoge|fuga で hoge or fuga と展開して awkのパターン入れて読ませたい訳です。
140:名無しさん@お腹いっぱい。
18/05/26 08:23:21.90 .net
>>137
なるほどね。こういうこと? (ZZZ.txtの代わりにヒアドキュメント使ってる)
$ cat <<. | awk '($2 ~ /(hoge|fuga)/) && ($3 ~ /02/) {print}'
example111.com hoge 02
example222.com hoge 03
456.com fuga 05
456example.com fuga 02
789.com peke 08
.
example111.com hoge 02
456example.com fuga 02
141:名無しさん@お腹いっぱい。
18/05/26 09:09:37.27 .net
勉強不足でヒアドキュメントの知識が浅くて申し訳ないのですが
多分合ってると思います。
うまくいかないのは hoge|fuga の部分が一定でなく
peke|hoge|miso だったり fuga のみだったりするので悩ましいのです。
142:名無しさん@お腹いっぱい。
18/05/26 09:53:14.80 .net
条件をコマンドの結果から作りたい&その条件をawkの条件に埋め込みたいってだけ?
hogehuga=( $(cat ZZZ.txt |grep XXX) )
SAVEIFS=$IFS
IFS=$'|'
hogehuga="${hogehuga[*]}"
IFS=$SAVEIFS
[ "$hogehuga" = "" ] && hogehuga="0個の条件"
awk '($3 !~ /'"$hogehuga"'/) && ($4 ~ /01/)' output.txt
って感じとか
143:名無しさん@お腹いっぱい。
18/05/26 10:05:05.40 .net
ああ、条件の作成は>>136の最後ですでにワンライナーで教えているのか。しつれい
144:名無しさん@お腹いっぱい。
18/05/26 10:44:16.45 .net
>>139
そのhoge|fugaはどこから来るの?
grep(1)コマンドの結果?
145:名無しさん@お腹いっぱい。
18/05/26 10:58:04.08 .net
>>135 の最初で説明してね?>>135-137は噛み合ってないだけかなw というか、>>136の確認/質問のキモがわかってないというか
146:名無しさん@お腹いっぱい。
18/05/26 11:18:16.86 .net
条件文の | をパイプとかいうからわけわかんなくなる
147:133
18/05/26 11:49:32.72 .net
そういう場合はパイプって言わないんですか。失礼しました。
正規表現でつかう or の役割を hoge fuga の間には挟みたいのです。
148:名無しさん@お腹いっぱい。
18/05/26 12:01:23.51 .net
>>145
>>136
>$ cat ZZZ.txt | grep XXX | tr '\n' '|' | sed 's/|$//1'
>↑こういうので行けるけど。違うでしょ?
って教えてくれてるやん。「違わない」「それです」でいいんじゃないの?それが違うならどう違うって言うべき
149:かと(どうみても違わないとしか思えないけど) 質問自体がアレだが自分の言いたいことをうまく説明できないのはいいとして、応えてくれてる人の言ってることがわからない/それに応えないのはアレだな
150:名無しさん@お腹いっぱい。
18/05/26 12:03:34.81 .net
awkの手前で別途 fgrep -f か egrep -f を使った方が、改行→「|」変換をサボれて楽な気がする。
fgrep/egrep -f を使うときは bashないし zsh 依存になるけど
fgrep -f <(grep XXX ZZZ.txt)
と書くともっと楽だね。
151:名無しさん@お腹いっぱい。
18/05/26 12:10:12.44 .net
\じゃないよバックスラッシュだよ
というのがありそうな気もしないでもない
152:133
18/05/26 12:32:36.46 .net
シェルスクリプト内で自動で行いたい旨を
書き損じておりました。
cat ZZZ.txt |grep XXX
hoge
fuga
から
awk '($3 !~ /hoge|fuga|neko/) && ($4 ~ /01/)' output.txt
としたいのです。
>>146
>$ cat ZZZ.txt | grep XXX | tr '\n' '|' | sed 's/|$//1'
でまさしく狙い通りの出力がされるのですが>>133のawkのパターン部にどうかけば同じ文字列が出せるかわかりません
153:名無しさん@お腹いっぱい。
18/05/26 12:38:10.49 .net
awk の文はただの文字列でしかない
awk '($3 !~ /'"$aaa"'/) && ($4 ~ /01/)' output.txt
でも、
awk "(\$3 !~ /${aaa}/) && (\$4 ~ /01/)" output.txt
でも(他にエスケープ必要なのあるかな?)、
普通にシェル変数を(文字列内に)展開するのと変わらんぞ
154:名無しさん@お腹いっぱい。
18/05/26 12:42:16.30 .net
書き損じどうこうじゃなくて、受け応えができないのが致命的ではあるなw
155:名無しさん@お腹いっぱい。
18/05/26 12:44:02.94 .net
よく見たら、
hoge
fuga
から
hoge|fuga|neko
って、nekoはどこから来たっていう。まあうっかりだろけど
156:133
18/05/26 13:37:00.34 .net
みなさん申し訳ありません
>>150のレスを見てクォートをよ〜く見なおしたら動きました。
初心者のたわごとに付きあわせてしまい申し訳ありませんでした。
157:名無しさん@お腹いっぱい。
18/05/27 08:08:25.73 .net
nekoです。nekoはいます。
158:名無しさん@お腹いっぱい。
18/05/30 15:51:14.73 .net
寝た子は起こすな
寝子は起こすな
159:名無しさん@お腹いっぱい。
18/05/30 20:03:13.31 .net
sedコマンドでSGRを扱いたいんですがどうすればいいですか。
$ echo abc | sed 's/^a/\033[1m&\033[0m/1'
などとしてaを太字にしたりしたいです。
160:名無しさん@お腹いっぱい。
18/05/30 20:16:35.46 .net
echo abc | sed -e 's/^a/'$'\033[1m&'$'\033[0m/1'
161:名無しさん@お腹いっぱい。
18/05/30 21:08:39.87 .net
横からだが、
なんのこっちゃと思ったら $'' はエスケープ文字処理してくれんのね。なるほど
最初のだけでいいのでは?もしくは最初に付ける。もしくは逐一付けて閉じる
echo abc | sed -e 's/^a/'$'\033[1m&\033[0m/1'
echo abc | sed -e $'s/^a/\033[1m&\033[0m/1'
echo abc | sed -e 's/^a/'$'\033''[1m&'$'\033''[0m/1'
と思いました
162:156
18/05/31 06:51:45.12 .net
ありがとうございます。解決しました。
これは後出しになってしまいますが、POSIXの範囲でやりたかったので
$''ではなく$(printf)を使いました。
163:名無しさん@お腹いっぱい。
18/06/02 23:56:12.94 .net
英語圏の序数詞を適切に処理するシェルスクリプト(というかワンライナー)を考えたのですが添削してください
$ for i in $(seq 15); do echo $i$(case $i in *1) echo st;; *2) echo nd;; *3) echo rd;; *) echo th;; esac); done
出力は一応望み通りでまたPOSIX utils+seq(1)のみで実行可能です。
164:名無しさん@お腹いっぱい。
18/06/03 00:35:29.50 .net
11st とか 12nd になってるけどそれはいいの?
165:名無しさん@お腹いっぱい。
18/06/03 00:38:58.53 .net
なにいっとるんやこいつw
166:名無しさん@お腹いっぱい。
18/06/03 01:12:42.26 .net
なにいっとるんやってなにいっとるんやww
167:160
18/06/03 01:46:34.86 .net
すいません。>>161 さまのおっしゃる通りです。
$ for i in $(seq 30); do echo $i$(case $i in *1?) echo th;; *1) echo st;; *2) echo nd;; *3) echo rd;; *) echo th;; esac); done
これでどうでしょうか
168:名無しさん@お腹いっぱい。
18/06/03 16:20:05.98 .net
クソ
169:名無しさん@お腹いっぱい。
18/06/03 16:34:12.72 .net
いんでね
170:名無しさん@お腹いっぱい。
18/06/03 17:38:56.64 .net
まず添削してくださいってどうしてほしいんだ
ちゃんと動いてんならそれはもう正解だと思うんだが
171:名無しさん@お腹いっぱい。
18/06/03 21:36:16.19 .net
実際間違ってたんだし、いいじゃん
172:名無しさん@お腹いっぱい。
2018/06/04
173:(月) 20:30:59.60 .net
174:名無しさん@お腹いっぱい。
18/06/04 20:52:08.98 .net
エラるのはbashのバージョンのせいかな?3.2.57ではエラる/4.3.48では問題ない
だとしたらPOSIX utils云々はちょっと違うんじゃねと思わなくもない。POSIX utils云々って書いている意図がよくわからんけど
175:名無しさん@お腹いっぱい。
18/06/04 21:51:17.95 .net
case文をこうしたら3.2.57で動いた
case $i in (*1?) echo th;; (*1) echo st;; (*2) echo nd;; (*3) echo rd;; (*) echo th;; esac
176:名無しさん@お腹いっぱい。
18/06/04 22:16:01.07 .net
おおっ。ぱーふぇくつ(?)やねっ!
( が必要??なんなんなん??と謎だけど
177:名無しさん@お腹いっぱい。
18/06/04 22:26:45.14 .net
$() 内では、case の ) を case の ) と認識してないで、$( の終わりと見てまうってのか。それで普通は使わない ( をか。いちおう ( はつけてもいいのね。つけてもつけなくてもいい存在みたいだけど
178:名無しさん@お腹いっぱい。
18/06/04 22:42:04.72 .net
え……
>>164 のやつ、GNU bash 4.4.12,zsh 5.3.1,dash全てで動いたんだけど(Debian GNU/Linux)。
もちろん$()判定の不具合を回避したcase ()版でも動いたけれども。
179:名無しさん@お腹いっぱい。
18/06/04 23:08:17.44 .net
bashの前のバージョン 3.2.57 でのなんですけど
180:名無しさん@お腹いっぱい。
18/06/04 23:49:50.64 .net
あ。>>170でそう書いてあるな……。すいません。
181:名無しさん@お腹いっぱい。
18/06/05 00:18:12.94 .net
sedなどで
1. 「%」以降改行までを削除
2. ただし「%」の直前に「\」があれば削除しない
(要するにTeXシステムのコメント除去)
をしたいです。また、できればなのですがPOSIXの範疇で行いたいです。
しかし2.を表わす正規表現が分かりません。教えていただけないでしょうか。
sedでsed -e '/%/{}'のようにして{}の内部で「\」が前置されているか判定するのが一番一般的かとは思うのですが
それさえ……。
どうかよろしくおねがいします。
182:名無しさん@お腹いっぱい。
18/06/05 00:27:24.06 .net
sed -e '/^%/d' -e 's/\([^\]\)%.*$/\1/g'
でも確かTeXってオプション引数に%含まれてる場合コメントにならないんじゃなかったか?
\somecs[hoge=42%]{VAL}
↑こういうの。いや俺の記憶違いかもしれんが
183:名無しさん@お腹いっぱい。
18/06/05 01:22:58.47 .net
sedのスレもあれば
正規表現のスレもある
なんでここで聞く
184:名無しさん@お腹いっぱい。
18/06/05 01:34:56.97 .net
使えるからかな
185:名無しさん@お腹いっぱい。
18/06/05 15:36:09.34 .net
以下のCのソースコードをシェルスクリプトに直したいのですが難しくてできない状態です
お願いできますでしょうか?
Cでは動作確認済みです
インデントするとここに貼れなかったので、見にくくなっていてすみません
どなたかよろしくお願いします
#include <stdio.h>
int main(void){
int res, i;
printf("2以上の整数をキーボードから入力してください。\n");
scanf("%d", &res);
for (i = 2; i <= res; i++) {
if (i == res) {
printf("%dは素数でした。\n", res);
}
else if ((res % i) == 0) {
printf("%dは素数ではありません。%dで割り切れます。\n", res, i);
break;
}
}
return 0;
}
186:名無しさん@お腹いっぱい。
18/06/05 16:08:24.34 .net
宿題っぽい
187:名無しさん@お腹いっぱい。
18/06/05 16:10:05.52 .net
なんかここ最近大学の宿題か?っていう質問多いな
188:名無しさん@お腹いっぱい。
18/06/05 16:10:24.26 .net
丸被りしててワロタ
189:名無しさん@お腹いっぱい。
18/06/05 16:12:56.96 .net
さすがに今回のはな
190:名無しさん@お腹いっぱい。
18/06/05 16:18:19.15 .net
判定方法から見直した方がいいんじゃないの
なんか無駄そう
191:名無しさん@お腹いっぱい。
18/06/05 16:31:28.92 .net
宿題は自分でやろう
192:181
18/06/05 16:41:35.30 .net
その通りっすね
スレ汚し失礼しました
193:名無しさん@お腹いっぱい。
18/06/05 17:10:33.43 .net
以下のCのソースコードをシェルスクリプトに直したいのですが
× 難しくてできない状態です
○
194:馬鹿だからできないです 勝手に難しい状態にするんじゃねーよ
195:名無しさん@お腹いっぱい。
18/06/05 17:13:20.82 .net
普通に読めば自分にとっては難しいってことなんじゃ
大学生の宿題も困るが読解力の無いバカも困る
196:名無しさん@お腹いっぱい。
18/06/05 17:14:42.20 .net
だな
197:名無しさん@お腹いっぱい。
18/06/05 17:16:21.87 .net
このスレは馬鹿ばかりいる状態ですwww
198:名無しさん@お腹いっぱい。
18/06/05 17:16:51.44 .net
だな
199:名無しさん@お腹いっぱい。
18/06/05 17:18:07.86 .net
プライドで自分が馬鹿でわかりませんって言うことができないから
それは悪くねぇけどさぁ、難しい状態になっちゃんてんのよー
って言いたいからそう書いてるんだろ
それぐらい読み取れよ
200:名無しさん@お腹いっぱい。
18/06/05 17:19:01.78 .net
だな
201:名無しさん@お腹いっぱい。
18/06/05 17:22:56.16 .net
よほど気に障ったか気に入られたらしいwどっちかな?
202:名無しさん@お腹いっぱい。
18/06/05 17:37:21.07 .net
だな
203:名無しさん@お腹いっぱい。
18/06/05 17:53:12.42 .net
んだ
204:名無しさん@お腹いっぱい。
18/06/05 18:20:42.13 .net
>>194
馬鹿乙
いい加減にしとけ
205:名無しさん@お腹いっぱい。
18/06/05 18:35:06.81 .net
だな
206:名無しさん@お腹いっぱい。
18/06/05 18:35:44.97 .net
>>199
あんたよっぽど気に触ったんだねw
207:名無しさん@お腹いっぱい。
18/06/05 19:00:07.82 .net
>>194
わざわざまた出てくるとかどんだけプライド高いんだよ w
208:名無しさん@お腹いっぱい。
18/06/05 19:25:49.18 .net
>>202
拗らせるだけだからもう触んな。わかるやつにはわかってるから
209:名無しさん@お腹いっぱい。
18/06/05 19:35:30.82 .net
せやな
210:名無しさん@お腹いっぱい。
18/06/05 20:09:14.02 .net
>>189は相当に痛い人だなw
211:名無しさん@お腹いっぱい。
18/06/05 20:28:47.22 .net
Cからawkだとつまらない解になってしまうな。
awk '{for(i=2;i<=$0;i++){
if(i==$0){print $0"は素数でした 。"}
else if(($0%i)==0){print $0"は素数ではありません。"i"で割り切れます。";break;
}}}' <<< "$(read -p "2以上の整数をキーボードから入力してください。" res ;
cat <<< "$res")"
212:名無しさん@お腹いっぱい。
18/06/05 21:20:01.96 .net
>>205
いい加減にしろ。うざいって言われてるのはお前だってわかってないのか?
213:名無しさん@お腹いっぱい。
18/06/05 21:49:44.22 .net
だな
214:名無しさん@お腹いっぱい。
18/06/05 22:21:32.15 .net
curl -s "URLリンク(hage.com.json") | jq -r '.main | .detail_list[] | .file_list[] | .date, .file_title, .file_name'
これだと、date と file_title とfile_name の内容が表示されるんですが、
detail_listと同じ階層にあるnavi_nameの内容も表示させたい場合はどう書けばいいですか?
よろしくお願いします。
215:名無しさん@お腹いっぱい。
18/06/06 02:39:28.51 .net
>>209
とくにこだわりがないのであれば jq じゃなく parsrj 使えば?
216:名無しさん@お腹いっぱい。
18/06/06 02:47:20.26 .net
>>207
何言ってんだお前?
217:名無しさん@お腹いっぱい。
18/06/06 09:02:34.23 .net
aaa=(888 犬 `date +"%Y%m%d"010000 -d last-sunday`)
bbb=(777 猫 `date +"%Y%m%d"150000 -d last-Saturday`)
ccc=(666 鳥 `date +"%Y%m%d"000000 -d last-friday`)
for hoge in "$aaa" "$bbb" "$ccc"
do
if [ -e ~/${hoge[1]}_${hoge[2]:0:4}_${hoge[2]:4:2}_${hoge[2]:6:2}.mp4 ]; then
exit 0
else
ffmpeg -i ~/output/${hoge[2]}-${hoge[0]}.aac ~/${hoge[1]}_${hoge[2]:0:4}_${hoge[2]:4:2}_${hoge[2]:6:2}.mp4
fi
done
こんな感じのスクリプト書いたのですが、配列が展開してくれません。
どうすれば変数に入れた配列が機能するでしょうか
アドバイスお願いします。
218:名無しさん@お腹いっぱい。
18/06/06 09:51:21.96 .net
>>210
jqにこだわりはないが、
parsrjなんて誰も使ってないものは使いたくないなw
219:名無しさん@お腹いっぱい。
18/06/06 09:51:56.75 .net
>>212
配列はbash専用機能なので使うな
220:名無しさん@お腹いっぱい。
18/06/06 13:07:10.63 .net
>>189
状態ってなんだよwwwって話だよなあ
頭の悪い人は理解できないみたいだけど
221:名無しさん@お腹いっぱい。
18/06/06 13:12:22.57 .net
なんだかんだレスに飢えてるよね
222:名無しさん@お腹いっぱい。
18/06/06 13:23:12.77 .net
やりたいこと想像してベタにやってみたけど
printf "%s %s %s\n" ${aaa[@]} ${bbb[@]} ${ccc[@]} | while read hoge0 hoge1 hoge2; do
if [ -e ~/${hoge
223:1}_${hoge2:0:4}_${hoge2:4:2}_${hoge2:6:2}.mp4 ]; then exit 0 else ffmpeg -nostdin -i ~/output/${hoge2}-${hoge0}.aac ~/${hoge1}_${hoge2:0:4}_${hoge2:4:2}_${hoge2:6:2}.mp4 fi done ...て、ほぼ配列じゃなくなっちゃったは
224:名無しさん@お腹いっぱい。
18/06/06 13:55:28.85 .net
>>217
あとは、そのbash依存の文字列の~文字目をとってくるってのをなくそう
っていうかdate使って%Y_%m_%dとかでいいだろと
225:名無しさん@お腹いっぱい。
18/06/06 14:36:06.61 .net
よくいる偉そうにしたいのが主な目的なのがわいてる感じ
226:名無しさん@お腹いっぱい。
18/06/06 14:45:44.90 .net
そういう言葉でしか言い返せないのな
悔しかったら技術で勝負しろ
227:名無しさん@お腹いっぱい。
18/06/06 14:49:07.49 .net
どこに勝負要素があるのか分からない
しかし最近汚いコードがばらっと貼り付けられまくるのは同一人物なのか?
228:名無しさん@お腹いっぱい。
18/06/06 14:51:48.88 .net
身に覚えがなかったら勝負とか言わないよなあ。てか、勝負ってw
なにか偉そうにしたい/マウントとりたいのがありありだな
229:名無しさん@お腹いっぱい。
18/06/06 14:55:35.99 .net
>>221
違うんじゃね。汚いとか言いだしたらきりがないぞな。言うなら整形して上げたほうが意味あるんじゃね
230:名無しさん@お腹いっぱい。
18/06/06 15:23:05.47 .net
年月日を配列でw
printf "%s %s %s\n" ${aaa[@]} ${bbb[@]} ${ccc[@]} | while read hoge0 hoge1 hoge2; do
fuga=(`echo $hoge2 | sed 's/^\(....\)\(..\)\(..\).*/\1 \2 \3/'`)
if [ -e ~/${hoge1}_${fuga[0]}_${fuga[1]}_${fuga[2]}.mp4 ]; then
exit 0
else
ffmpeg -nostdin -i ~/output/${hoge2}-${hoge0}.aac ~/${hoge1}_${fuga[0]}_${fuga[1]}_${fuga[2]}.mp4
fi
done
からの~
printf "%s %s %s\n" ${aaa[@]} ${bbb[@]} ${ccc[@]} | while read hoge0 hoge1 hoge2; do
set - `echo ${hoge2} | sed 's/^\(....\)\(..\)\(..\).*/\1 \2 \3/'`
if [ -e ~/${hoge1}_$1_$2_$3.mp4 ]; then
exit 0
else
ffmpeg -nostdin -i ~/output/${hoge2}-${hoge0}.aac ~/${hoge1}_$1_$2_$3.mp4
fi
done
231:名無しさん@お腹いっぱい。
18/06/06 15:51:47.08 .net
元のソースが汚いと修正も面倒だなとw
まず一旦ループと変数をやめる
if [ -e ~/犬_2018_06_06.mp4 ]; then
exit 0
else
ffmpeg -i ~/output/20180603010000-888.aac ~/犬_2018_06_06.mp4
fi
if [ -e ~/猫_2018_06_06.mp4 ]; then
exit 0
else
ffmpeg -i ~/output/20180603150000-777.aac ~/猫_2018_06_06.mp4.mp4
fi
if [ -e ~/鳥_2018_06_06.mp4 ]; then
exit 0
else
ffmpeg -i ~/output/20180603010000-666.aac ~/鳥_2018_06_06.mp4.mp4
fi
232:名無しさん@お腹いっぱい。
18/06/06 15:57:58.57 .net
つぎに、変数に入れ直す
そして書き込もうとしたらNGワードとか言われたから
ついでに関数にする
infile=~/output/20180603010000-888.aac
outfile=~/犬_2018_06_06.mp4
output "$infile" "$outfile"
infile=~/output/20180603150000-777.aac
outfile=~/猫_2018_06_06.mp4
output "$infile" "$outfile"
infile=~/output/20180603010000-666.aac
outfile=~/鳥_2018_06_06.mp4
output "$infile" "$outfile"
output() {
$infile=$1
$outfile=$2
if [ -e "$outfile" ]; then
exit 0
else
ffmpeg -i "$infile" "$outfile"
fi
}
233:名無しさん@お腹いっぱい。
18/06/06 16:00:15.08 .net
一旦余計な変数を排除する
output ~/output/20180603010000-888.aac ~/犬_2018_06_06.mp4
output ~/output/20180603150000-777.aac ~/猫_2018_06_06.mp4
output ~/output/20180603010000-666.aac ~/鳥_2018_06_06.mp4
output() {
[ -e "$2" ] && exit 0
ffmpeg -i "$1" "$2"
}
234:名無しさん@お腹いっぱい。
18/06/06 16:02:16.64 .net
>元のソースが汚いと修正も面倒だなとw
だろ?w そこはスルーでええやん、別に求められているわけでもないんだし
まあ、お疲れ様です(嫌味ではない)
235:名無しさん@お腹いっぱい。
18/06/06 16:15:15.79 .net
日付の部分を元に戻す
output "$(date +"%Y%m%d010000" -d last-sunday)-888.aac" "犬_$(date +"%Y_%m_%d" -d last-sunday).mp4"
output "$(date +"%Y%m%d150000" -d last-saturday)-777.aac" "猫_$(date +"%Y_%m_%d" -d last-saturday).mp4"
output "$(date +"%Y%m%d000000" -d last-friday)-666.aac" "鳥_$(date +"%Y_%m_%d" -d last-friday).mp4"
output() {
[ -e "$HOME/$2" ] && exit 0
ffmpeg -i "$HOME/output/$1" "$HOME/$2"
}
くだらん文字列結合を省く
output "$(date +"%Y%m%d010000-888.aac" -d last-sunday)" "$(date +"犬_%Y_%m_%d.mp4" -d last-sunday)"
output "$(date +"%Y%m%d150000-777.aac" -d last-saturday)" "$(date +"猫_%Y_%m_%d.mp4" -d last-saturday)"
output "$(date +"%Y%m%d000000-666.aac" -d last-friday)" "$(date +"鳥_%Y_%m_%d.mp4" -d last-friday)"
output() {
[ -e "$HOME/$2" ] && exit 0
ffmpeg -i "$HOME/output/$1" "$HOME/$2"
}
236:名無しさん@お腹いっぱい。
18/06/06 16:20:37.87 .net
なんかだらだらって感じ
237:名無しさん@お腹いっぱい。
18/06/06 16:25:36.02 .net
最終的にこんな感じかな(適当にやったので途中のコードはバグありだろう)
output "%Y%m%d010000-888.aac" "犬_%Y_%m_%d.mp4" last-sunday
output "%Y%m%d150000-777.aac" "猫_%Y_%m_%d.mp4" last-saturday
output "%Y%m%d000000-666.aac" "鳥_%Y_%m_%d.mp4" last-friday
output() {
infile=$(date +"$1" -d "$3")
outfile=$(date +"$2" -d "$3")
[ -e "$HOME/$outfile" ] && exit 0
ffmpeg -i "$HOME/output/$infile" "$HOME/$outfile"
}
もっとやりたいならoutput関数を以下のような仕様の引数の関数ににしてもいいし
output 010000 888 犬 last-sunday
output 150000 777 猫 last-saturday
output 000000 666 鳥 last-friday
順番変えてこうすりゃ最初の配列と同じようになる
output 888 犬 010000 last-sunday
output 777 猫 150000 last-saturday
output 666 鳥 000000 last-friday
まあ、配列なんかいらんっちゅー話だ
238:名無しさん@お腹いっぱい。
18/06/06 16:26:18.
239:74 .net
240:名無しさん@お腹いっぱい。
18/06/06 16:32:01.63 .net
これを続けるの?もうしないだろうw
241:名無しさん@お腹いっぱい。
18/06/06 16:45:31.82 .net
シェルスクリプトの変数処理って型推論?
242:名無しさん@お腹いっぱい。
18/06/06 16:46:02.10 .net
そうだな。やるつもりはなかったが、
例えば関数を作りたくなければ、こんな感じで行けるぞってことぐらいかな
while read -r a b c d; do
infile=$(適当に修正しろ)
outfile=$(適当に修正しろ)
[ -e "$HOME/$outfile" ] && exit 0
ffmpeg -i "$HOME/output/$infile" "$HOME/$outfile"
done <<DATA
888 犬 010000 last-sunday
777 猫 150000 last-saturday
666 鳥 000000 last-friday
DATA
こういう場合は標準入力として受け取ってループで回せってことだな
243:名無しさん@お腹いっぱい。
18/06/06 16:46:21.13 .net
>>209
これお願いします
244:名無しさん@お腹いっぱい。
18/06/06 16:46:50.03 .net
>>210
それなんですか?
245:名無しさん@お腹いっぱい。
18/06/06 16:47:01.39 .net
>>234
型なんて文字列しかねーよ
HTMLのフォームからのPOSTと同じだ
246:名無しさん@お腹いっぱい。
18/06/06 16:56:31.38 .net
白状する
181からここまで貼られてるソースコード全く読んでない
読む気起きない
247:名無しさん@お腹いっぱい。
18/06/06 17:11:54.82 .net
別に構わんよ。きたねーコードだなって
直感的に思って、それを治すことで
俺の直感は正しいことを証明して
自分で納得してるだけだから
248:名無しさん@お腹いっぱい。
18/06/06 17:24:58.19 .net
それは自惚れすぎだなw
249:名無しさん@お腹いっぱい。
18/06/06 17:33:16.47 .net
誰も求めてない証明ひけらかして悦に浸ってるだけか
250:名無しさん@お腹いっぱい。
18/06/06 17:41:52.35 .net
自分が汚いコード書いてた(誰でもそうだろう)&そこから綺麗にすることを学んだとこってとこかな
もうちょっと経験つんだらそんな誰でもそうだったとこなんてスルーだろうな。綺麗にすることには際限がない/突き詰めれば&極論では個人の好みに帰結するってとこで、そんな初心者的なのにいちいち文句を言うのが低レベル的なw
251:名無しさん@お腹いっぱい。
18/06/06 17:59:50.87 .net
>>236
もうその話題は終わったよ
252:名無しさん@お腹いっぱい。
18/06/06 18:30:15.42 .net
>>244
終わってないです
253:名無しさん@お腹いっぱい。
18/06/06 18:47:23.92 .net
>>245
つまらないからいいよ
254:名無しさん@お腹いっぱい。
18/06/07 01:01:10.78 .net
>>238
a=1
echo $((a + 1))
この場合の$aは数値じゃないんですか?
255:名無しさん@お腹いっぱい。
18/06/07 02:03:34.31 .net
>>212
for hoge in "$aaa" "$bbb" "$ccc"
"$aaa" "$bbb" "$ccc"は、最初のアイテムを示すだけ(888, 777, 666)で間違い
"${aaa[@]"が正しいもしくはとしたかったのだろうが、だったらforの機能的にも変数をArrayにする必要はないだろう。その記述以下でなんかするのでないなら
aaa/bbb/cccは単なる文字列として、for内で必要となったらArrayに分解すれば簡単に目的は達成するだろう
(てか、配列にするならaaa/bbb/cccなんて個々の変数じゃなくてそれこそそれを配列にすればいいのにと思うけど)
aaa="888 犬 `date +"%Y%m%d"010000 -d last-sunday`"
...
for fuga in "$aaa" "$bbb" "$ccc"
do
hoge=$($fuga)
if [ -e ~/${hoge[1]}_${hoge[2]:0:4}_${hoge[2]:4:2}_${hoge[2]:6:2}.mp4 ]; then
...
256:名無しさん@お腹いっぱい。
18/06/07 02:12:29.31 .net
>>247
必要となったら数値とみなす/数値に変換するだけだろう
a=hoge
の場合は、hogeは数値に変換できないからしょうがないので0にしてまうし、
[ a -eq 0 ]
なんて場合は、数値に変換できないのでエラーになるし。逆にa=1とかでエラーにならないのは数値だからと思えそうだが、単に数値に変換できてエラーにならないだけだろう
あくまでも文字列でしかないのは、
a=1
a="1"
a='1'
のどれも同じってとこからもそう推察できそうな。そもそも明らかな文字列でさえa=hogeだったりするけど
257:名無しさん@お腹いっぱい。
18/06/07 02:24:52.46 .net
>>248
>"${aaa[@]"が正しいもしくは
} 閉じ忘れ。てか、"${aaa[@]}"でも間違いで、"${aaa[*]}" だな
258:名無しさん@お腹いっぱい。
18/06/07 02:25:47.02 .net
>>248
>"${aaa[@]"が正しいもしくは
} 閉じ忘れ。てか、"${aaa[@]}"でも間違いで、"${aaa[*]}" の方だった
259:名無しさん@お腹いっぱい。
18/06/07 02:27:10.73 .net
あら、なんか恥ずかしい
260:名無しさん@お腹いっぱい。
18/06/07 05:10:54.45 .net
>>234>>238>>2
261:49 以前にこちらのスレでお世話になった者で横からですが勉強になります
262:名無しさん@お腹いっぱい。
18/06/07 12:21:50.51 .net
>>248
ありがとうございます。
実は他の方のレスを見て、関数というものを調べて
ある程度スッキリしたコードにできたのですが
当初自分の頭で考えていた>>212のようなコードがが動くようにご指摘いただけたのは
非常に助かりました。ありがとうございます。
263:名無しさん@お腹いっぱい。
18/06/07 12:33:31.74 .net
質問です。bashの配列を他のbashスクリプトに
コマンドライン経由でわたすにはどうしたら良いのでしょうか?
264:名無しさん@お腹いっぱい。
18/06/07 12:34:23.18 .net
ちなみに配列変数は一つじゃなくて複数です。
265:名無しさん@お腹いっぱい。
18/06/07 12:58:55.50 .net
Arrayひとつを単一の文字列で渡して、受けたとった方がArrayに戻すかなあ
sub-script.sh "${array1[*]}" "${array2[*]}" "${array3[*]}" ...
sub-script.sh:
array1=($1)
array2=($2)
array3=($3)
Arrayのアイテムの内容がIFSに引っかかってたらIFSを書き換える(/同調)するかなあ。よくありそうなアイテムがスペースありとかだったら、アイテムの内容として入ってなさそうなタブにするとか
(IFS=$'\t'; sub-script.sh "${array1[*]}" "${array2[*]}" "${array3[*]}" ...)
sub-script.sh:
array1=($1)
array2=($2)
array3=($3)
(分解時のセパレータとしてはタブもデフォルトIFSに入っているので分解時には特に設定する必要はない)
てか、そんなに配列をばんばん使わない方がいいんじゃねと思わなくもないw
266:名無しさん@お腹いっぱい。
18/06/07 13:38:14.12 .net
>>255
コマンドライン経由の意味はよくわからないが、
多分ファイルを使うのがいいと思う。
[渡す側]
declare | grep "渡したい変数" > /path/save
[受け取る側]
source /path/save
267:名無しさん@お腹いっぱい。
18/06/07 16:52:21.73 .net
つまり配列そのままで渡せないってことですね
268:名無しさん@お腹いっぱい。
18/06/07 17:07:52.55 .net
そのままでできると思う方が全くわかってないなという。まあ全くわかってないんだろうけど
269:名無しさん@お腹いっぱい。
18/06/07 17:16:31.55 .net
ここ数日で盛り上がりすぎやろ
270:名無しさん@お腹いっぱい。
18/06/07 21:43:15.08 .net
あかんか?
271:名無しさん@お腹いっぱい。
18/06/07 21:46:19.66 .net
ええで
272:名無しさん@お腹いっぱい。
18/06/07 22:15:48.04 .net
>>255
xmlなりjsonなり独自形式なりで渡せよ
273:名無しさん@お腹いっぱい。
18/06/07 22:39:09.40 .net
言語のオブジェクト(配列)を他のプロセスにそのまんま渡せるスクリプト言語ってなんかあったっけ?
間にはシリアラズ/デシリアライズなどの仕組みがあるのは当然だが、そんなの全く意識させない言語でサポートしている言語って。フレームワークなど使えばは抜きで。スクリプト言語でなくてもいいけどとりあえずこのスレなのでスクリプト言語で
274:名無しさん@お腹いっぱい。
18/06/07 23:15:52.17 .net
>>257
あ、
>分解時のセパレータとしてはタブもデフォルトIFSに入っているので分解時には特に設定する必要はない
何言ってんだか。せっかくスペースをセパレータとされるのを避けているのに、設定しなきゃダメだろう
sub-script.sh:
ORIGINAL_IFS="$IFS"
IFS=$'\t'
array1=($1)
array2=($2)
array3=($3)
IFS="$ORIGINAL_IFS"
275:名無しさん@お腹いっぱい。
18/06/07 23:26:19.86 .net
>>265
じぇーそんとかそういうためにあるんじゃないの?
276:名無しさん@お腹いっぱい。
18/06/08 00:05:04.96 .net
>>267
シリアライズ/デシリアライズの手法/フォーマットのひとつとしてね
そゆんじゃなくて、そんな変換が見えなーい言語ってなんかあったっけ。仮にJSONを使っていたとしてもそんなの見えない
277:名無しさん@お腹いっぱい。
18/06/08 00:07:58.91 .net
見えないってのがどういう意味なのか。
PowerShellみたいのなら見えないに入るのかな?
278:名無しさん@お腹いっぱい。
18/06/08 00:18:14.42 .net
分散オブジェクトに近い...つうても実装/言語により全然見えないにはならんけど
process.TheFunc(anObject)
と、呼んだら、別プロセスの
TheFunc(anObject) {
}
に、まんまオブジェクト(ただの配列でもいいけど)が入ってるくる�
279:謔、な PowerShellはそんなんなん?分散オブジェクトかな?
280:名無しさん@お腹いっぱい。
18/06/08 00:53:32.27 .net
スレチ
281:名無しさん@お腹いっぱい。
18/06/08 01:16:08.95 .net
いや、>>259なんて思うのはどういう根拠からかなあと。他のスクリプト言語でそんなんあるんかと
また現れるかもしれんだろw まあ、スレチではある
282:名無しさん@お腹いっぱい。
18/06/08 01:20:44.78 .net
>>257,258,254 全部、シリアライズ/デシリアライズのことで、どういうシリアライズ/デシリアライズを使うかでしかなく、まあ、普通はそれしかないわなで終わってることなんだけどね
ちょっとなんか他のスクリプト言語であるのかと気になったので
283:名無しさん@お腹いっぱい。
18/06/08 03:20:33.75 .net
最近他板でも意味も分からず答える輩が増えていますね。何ででしょう。
284:名無しさん@お腹いっぱい。
18/06/08 03:21:57.82 .net
新入社員が先輩よりプログラミング知識あることを知って俺結構世間の中でも出来る方なんじゃね?って勘違いする時期だな
285:名無しさん@お腹いっぱい。
18/06/08 03:49:58.80 .net
解答のクオリティまで下がってるな
パソコンの大先生混ざっとるやろ
286:名無しさん@お腹いっぱい。
18/06/08 05:43:51.14 .net
>>270
同一プロセス(要するにPowerShell内で閉じてる)ならそんな感じの記述でオブジェクトを渡せる
ちなみにパイプでも渡せる
他のプロセスへコマンドラインとなると無理だろうね
そもそもOSレベルでもたいていのOSはコマンドラインとして文字列の配列しか渡せないし
287:名無しさん@お腹いっぱい。
18/06/08 05:51:30.48 .net
JSONは不気味な拡張子なので使ってはいけません
288:名無しさん@お腹いっぱい。
18/06/08 07:18:25.50 .net
パソコンの大先生なら使いこなせよ
289:名無しさん@お腹いっぱい。
18/06/08 22:06:27.92 .net
POSIXで定義されているどの環境でも利用できる環境変数ってあります?
$PWDとか。
290:名無しさん@お腹いっぱい。
18/06/08 22:54:13.95 .net
>>280
環境変数で決まってるのは
URLリンク(pubs.opengroup.org)
ただしOS起動中まで含めると、必ず定義されてる環境変数はない。
PWDも昔のシェルだと定義してくれなかったりする。
まあ一般ユーザー権限で動いてるならPATH、HOMEあたりの存在は期待してもいいけど。
291:名無しさん@お腹いっぱい。
18/06/08 23:18:13.62 .net
Excelから出力したCSVのように一行(?)の中に改行が含まれた
データを扱うにはどうしたら良いでしょうか?
もう少し具体的に書きます。
カンマ区切りのCSVデータだと仮定して、
シェルスクリプトの中に関数を一行ごとに呼び出し、
列を引数に対応させたいです。
例えば以下のような内容のファイルがあったとして
a1,a2,a3,a4
b1,b2,b3,b4
c1,c2,c3,c4
syori "a1" "a2" "a3" "a4"
syori "b1" "b2" "b3" "b4"
syori "c1" "c2" "c3" "c4"
という風にsyori関数を呼び出したいのです。
ただし実際には各項目(a1等の部分)にExcelから出力したデータのように
改行やカンマやダブルクォートやシングルクォートや空白が入ることがあるのです
292:名無しさん@お腹いっぱい。
18/06/08 23:18:34.79 .net
各項目には \ が入ることもあります。
今回はCSVではありませんが、RFC4180(=ExcelのCSVの仕様)では
改行が\nのようにエスケープされません
URLリンク(ja.wikipedia.org)
> フ�
293:Bールドがコンマ、ダブルクォート、改行を含む場合は、かならずダブルクォートで囲む。 > また、フィールドに含まれるダブルクォートは2つ並べてエスケープする。 > > "日本 CRLF > 国","""東京""","127,767,944" CRLF ↑「日本国」の国の前に改行が入っている場合
294:名無しさん@お腹いっぱい。
18/06/08 23:19:28.84 .net
>>282-283は、ここから移動してきました
【Bash】Windows Subsystem for Linux【WSL】3
スレリンク(linux板)
295:名無しさん@お腹いっぱい。
18/06/08 23:23:17.66 .net
>>283
rubyとかpythonでCSV処理用のライブラリを使うとか、
CSV処理用の専用ツール使うとか。
落とし穴が一杯あるので、シェルだけでやるのは危険。
296:名無しさん@お腹いっぱい。
18/06/08 23:24:41.88 .net
URLリンク(copiezzare.info)
297:名無しさん@お腹いっぱい。
18/06/08 23:31:03.89 .net
>>285
危険は承知で環境依存させたくないので、
シェルスクリプト(POSIX)だけでやりたいのです
298:名無しさん@お腹いっぱい。
18/06/08 23:35:52.21 .net
>>287
じゃあ
URLリンク(wwr2.ucom.ne.jp)
とかどう?
299:名無しさん@お腹いっぱい。
18/06/08 23:57:15.15 .net
邪道としては、改行コードとか\を絶対に使われない文字に置換して最後にまた戻すとかやったな
アルメニア文字とかに置換するんやで
300:名無しさん@お腹いっぱい。
18/06/09 00:06:32.51 .net
今時、シェルスクリプトが使える環境でperlやpythonがデフォルトで入ってないOSの方が稀だろう。なんかここ最近のPOSIXと言えばいいというようなのはなんかアレだな
301:名無しさん@お腹いっぱい。
18/06/09 00:12:49.10 .net
>>290
busybox、alpine
302:名無しさん@お腹いっぱい。
18/06/09 00:14:40.86 .net
>>291
そういう環境で、CSVファイルの扱いが必要かあ?
303:名無しさん@お腹いっぱい。
18/06/09 00:17:26.20 .net
そんな変わりもんを出されても
>>287がそんなの想定してるとでも思ったの?そんなの想定しているヤツは自力でできるだろうし、そんなの使うやつは必要なら自分で入れるだろう
知識自慢はいらんよw
304:名無しさん@お腹いっぱい。
18/06/09 00:21:35.51 .net
てゆうか問題に適した言語を組み合わせて問題を解くってのが
もともとのUNIXの思想だと思うので、
CSV扱うならCSVに向いた言語使う方がUNIX的だと思うのよね。
まあケースバイケースなんだけど。
305:名無しさん@お腹いっぱい。
18/06/09 00:23:20.54 .net
つまりC++ってことか。
306:名無しさん@お腹いっぱい。
18/06/09 00:25:28.50 .net
URLリンク(codezine.jp)
>gawkの開発は「完全を目指すのではなく9割をサクサクこなし、フィールドに改行を含むようなCSVファイルは専用のツールで処理すれば良い」
ですらだからなあ
Linuxはawk=gawkだが、BSDは巣の(?)awkでgawkは別に入れなければならなく、gawkの機能を使うかどうかっていう話ならわかるけど、そんなんだったらperlやpython使った方がLinuxとBSDの違いも無いだろしな
307:名無しさん@お腹いっぱい。
18/06/09 00:34:57.73 .net
>>287は単に他の言語/知識までは自分の手に余るっていう逃げだろうとしか見えんな
そこに山があるから登るっていうあえてメンドくさいことをしたいってのなら、のらないでもないけどw
308:名無しさん@お腹いっぱい。
18/06/09 00:45:11.89 .net
CSVじゃないって書いてるのに
読めない人多いね
309:名無しさん@お腹いっぱい。
18/06/09 00:50:25.58 .net
とは言ってるけど、CSVとはどう違うとかは全くだな。てか、延々とCSVのここがってしかないやん
CSVと似た何か特殊なものなら、普通にストリームの一文字一文字処理できるスクリプト使ったほうがいいだろう、てかそれしかないだろう
310:名無しさん@お腹いっぱい。
18/06/09 01:21:51.27 .net
> シェルスクリプト(POSIX)
(;^ω^)
311:名無しさん@お腹いっぱい。
18/06/09 01:40:22.57 .net
POSIXはまあいいとしてPOSIXという単語が出る度アレルギーのごとく反発する人はなんなの?
OpenGroupに親でも殺されたのか?
312:名無しさん@お腹いっぱい。
18/06/09 01:46:42.05 .net
>>290
だって課題がそうなってるんだもん
313:名無しさん@お腹いっぱい。
18/06/09 01:53:39.41 .net
>>301
本当に自身がわかって言っているのかってとこだな。その必要性とか
>>302のような冗談なら笑えるけど
314:名無しさん@お腹いっぱい。
18/06/09 02:06:03.67 .net
nkfとかiconvで 改行コードを調べたらええんちゃう?
busybox, alpineぐらいのコンテナに nkf を足したぐらいで大してでかくならんやろうに。
315:名無しさん@お腹いっぱい。
18/06/09 02:11:54.28 .net
>>287でposix shellだけで言うてるからダメだよ
316:名無しさん@お腹いっぱい。
18/06/09 03:14:25.32 .net
ぽ…POSIX
317:名無しさん@お腹いっぱい。
18/06/09 03:39:18.86 .net
今日はみなさん夜更かしですね
まるで自えn(ry
318:名無しさん@お腹いっぱい。
18/06/09 06:55:43.82 .net
>>293
お前さんこの間から痛いぞ
319:名無しさん@お腹いっぱい。
18/06/09 09:19:07.59 .net
はいはい
320:名無しさん@お腹いっぱい。
18/06/09 12:31:39.35 .net
はい、は一回
321:名無しさん@お腹いっぱい。
18/06/09 13:35:30.76 .net
はいは一回 と
はいぱー回 ってにてるな
322:名無しさん@お腹いっぱい。
18/06/09 13:36:18.92 .net
そうか?
323:名無しさん@お腹いっぱい。
18/06/09 16:10:28.91 .net
ぽしっくすなの?
ぽじっくすなの?
ぽずぃっぐずなの?
なんなの?
324:名無しさん@お腹いっぱい。
18/06/09 18:01:39.57 .net
トマトとか言ってる日本人が気にすんな。特定のそういう発音違いをめっちゃ馬鹿にしたりするのも日本人だけど
325:名無しさん@お腹いっぱい。
18/06/09 18:02:59.74 .net
相対するをあいたいするって読んだら漫画の読みすぎだろって馬鹿にされたこと思い出したわ
326:名無しさん@お腹いっぱい。
18/06/09 18:45:27.81 .net
なんのスレやねん
327:名無しさん@お腹いっぱい。
18/06/09 19:40:22.27 .net
ぽちっとな
328:名無しさん@お腹いっぱい。
18/06/09 23:38:49.68 .net
質問です。一データの中に改行が含まれた
データを扱うにはどうしたら良いでしょうか?
329:名無しさん@お腹いっぱい。
18/06/09 23:39:51.65 .net
改行を置換して読み取る
330:名無しさん@お腹いっぱい。
18/06/10 00:19:36.87 .net
1データとは
331:名無しさん@お腹いっぱい。
18/06/10 00:30:51.68 .net
>>318
そういうものはシェルスクリプトでは扱わない
適材適所
バカは同じものをなんにでも押し付けようとするから無駄に機能が肥大化する
332:名無しさん@お腹いっぱい。
18/06/10 01:40:53.84 .net
シェルスクリプトだって適切に扱える(場合はある)
例えば1データがファイル単位に分かれてるとか1データの処理が1プロセスの寿命と同じでいいとか
333:名無しさん@お腹いっぱい。
18/06/10 02:20:54.22 .net
U+001EやU+001Fを区切り文字として利用してる方いらっしゃいますか?
結構便利(絶対に他の文字と衝突しない)だと思うんですが、そういうシェルスクリプトを見たことがありません。
334:名無しさん@お腹いっぱい。
18/06/10 02:29:16.89 .net
はっはっは。一データの中に改行が含まれてる
ものすら扱えないここの連中にそんな発想ができるやつはいない
その程度の陳腐なアイデアであったとしてもな
335:名無しさん@お腹いっぱい。
18/06/10 02:38:52.56 .net
ここだけのシェルスクリプトだけを言っているわけではないと思うけど
336:名無しさん@お腹いっぱい。
18/06/10 08:14:53.42 .net
>>323
正直、そういう解答を出してほしかったね。だせるかなーって思っていたけど
シェルスクリプトでそういうデータを扱うなんておかしいとかのたまうばかり
\x1c(ファイル分離)、\x1d(グループ分離)、\x1e(レコード分離)、\x1f(ユニット分離)は
まさにそういう用途で使うもの。ここの連中の技術力の低下を感じる。
337:名無しさん@お腹いっぱい。
18/06/10 09:06:40.68 .net
見たことがないって言ってんのに、
このスレ住人の話に限定してどうすんだ
338:名無しさん@お腹いっぱい。
18/06/10 09:26:13.67 .net
いや>289で答えとるやん
>318ってようは>282の質問し直しでしょ
339:名無しさん@お腹いっぱい。
18/06/10 11:02:49.39 .net
>>327
住民に限定し、しかも馬鹿にしたい欲求を生んだ過去があったのだろう。馬鹿にされたとか、単になにか否定されたとか
340:名無しさん@お腹いっぱい。
18/06/10 12:04:18.14 .net
>>328
それは
341:改行コードを置換するって話 置換することで遅くなってしまう悪いパターン 置換なんかしません
342:名無しさん@お腹いっぱい。
18/06/10 12:18:36.59 .net
イミフ
343:名無しさん@お腹いっぱい。
18/06/10 12:42:33.56 .net
改行コード含んだデータ扱いたいという前提の質問かと思ったら
改行コード含んだデータなどナンセンスであるという主張だった
344:名無しさん@お腹いっぱい。
18/06/10 13:18:33.58 .net
イミフ
データの中に改行コードがあるってだけだろ
345:名無しさん@お腹いっぱい。
18/06/10 13:18:58.61 .net
データの中に改行コードがあっても置換する必要はありませんよねぇ
346:名無しさん@お腹いっぱい。
18/06/10 13:19:57.33 .net
>>289はデータの中に改行コードがあるのはナンセンスだから置換しろという主張
そんなことをする必要はない
347:名無しさん@お腹いっぱい。
18/06/10 13:40:18.16 .net
なんかただ否定している感じにしか見えんけど
シェルスクリプトで扱うまでも考えて否定してんのかな?
348:名無しさん@お腹いっぱい。
18/06/10 13:41:43.48 .net
>>289はナンセンス云々でなくて、現実的なだろと思うけど
349:名無しさん@お腹いっぱい。
18/06/10 14:38:11.53 .net
>>337
動くかどうかだったら動くけど
速度が遅過ぎで現実的じゃないよ
なにせ一行一行forkとプロセス起動が必要になるしね
350:名無しさん@お腹いっぱい。
18/06/10 15:07:33.90 .net
速度が問題になるかは条件次第で
現実的じゃないと言いきれる根拠は今のところ無い
351:名無しさん@お腹いっぱい。
18/06/10 15:18:07.55 .net
>>338
> なにせ一行一行forkとプロセス起動が必要になるしね
イミフ
352:名無しさん@お腹いっぱい。
18/06/10 15:18:34.26 .net
>>326
だってどうせCSVの話だろ?区切り文字を換える話をすると
後出しじゃんけんでソレは違うって言い出すのが常套手段
353:名無しさん@お腹いっぱい。
18/06/10 15:46:39.73 .net
一度全部置換してから読み取ればいいんじゃないですか(名推理
354:名無しさん@お腹いっぱい。
18/06/10 15:59:54.35 .net
因みにCSVはRFCで「内部改行はCRLF」と定まっているので
ここから攻めるというのもアリ。
「\r\n」という組はフィールド区切りとしては無効にすればよろし
え? CSV出力すると内部改行がLFになるLibreOffice Calc?
知らない子ですね…
355:名無しさん@お腹いっぱい。
18/06/10 16:03:53.76 .net
>>340
まったく
どういう処理を想定しているのか全くみえんな。そのなアホなという処理方法は
356:名無しさん@お腹いっぱい。
18/06/10 16:07:14.39 .net
> "Excelから出力したCSVのように" 一行(?)の中に改行が含まれた
> データを扱うにはどうしたら良いでしょうか?
> カンマ区切りのCSVデータだと "仮定して" 、
> 今回はCSVではありませんが、
こう書いてあるのに、CSV形式だって思い込むのは
頭が悪いと思います。
357:名無しさん@お腹いっぱい。
18/06/10 16:07:56.46 .net
>>343
> 因みにCSVはRFCで「内部改行はCRLF」と定まっているので
なるほど、\n のようにエスケープしてはいけないんですね
358:名無しさん@お腹いっぱい。
18/06/10 16:10:01.41 .net
だったらお前がそのわけわからんCVS形式でない答えを応えれtばええんちゃんですかね?具体的に何も言ってないのに対する汎用的な
自称賢いらしいから時間かけずになんでもござれの汎用的的なのかけるだろ?
359:名無しさん@お腹いっぱい。
18/06/10 16:10:06.96 .net
>>345
だったら好きにすれば?
360:名無しさん@お腹いっぱい。
18/06/10 16:10:50.12 .net
>>343
> 一度全部置換してから読み取ればいいんじゃないですか(名推理
そして一行ずつ読み取るわけですねw
そりゃそうでしょう。\nを全部改行コードに戻してしてしまったら、
区別できないですからね
361:名無しさん@お腹いっぱい。
18/06/10 16:11:08.39 .net
>>345
既にCSVをどうするのかという話題に変わってるんですよ。
空気読んでくださいよ。
362:名無しさん@お腹いっぱい。
18/06/10 16:11:30.84 .net
>>346は>>345っぽいけど、そうなら他人を頭が悪いとは言えんだろうw
363:名無しさん@お腹いっぱい。
18/06/10 16:12:08.78 .net
>>347
> だったらお前がそのわけわからんCVS形式でない答えを応えれtばええんちゃんですかね
データの中に改行コードがあるってだけで、
フォーマットは最初から指定してないよ?
その場合どういうやり方があるでしょうって話なんだが、
CSVだと思いこんで効率の悪い方法しか思いつかず
指摘したら逆ギレするのやめなよ?ダサいから
364:名無しさん@お腹いっぱい。
18/06/10 16:12:51.65 .net
>>338
MINIX でも使ってるの?
365:名無しさん@お腹いっぱい。
18/06/10 16:13:10.06 .net
>>351
なにが言いたいのかわからんが、RFCのCSVの仕様に改行コードを
エスケープするという仕様はない。ダブルクォートでくくればいいだけ
366:名無しさん@お腹いっぱい。
18/06/10 16:13:34.23 .net
>>353
へー、MINIXも遅いんですねー
367:名無しさん@お腹いっぱい。
18/06/10 16:14:28.24 .net
えっ、
368:一行づつ fork + exec してるって本気で思い込んでるんだ…
369:名無しさん@お腹いっぱい。
18/06/10 16:16:58.31 .net
>>352,354
...はあ...
マジで言ってるの?
370:名無しさん@お腹いっぱい。
18/06/10 16:22:35.88 .net
>>356
外部コマンドを呼び出すならそうだね
まさか外部コマンドを呼び出さないで置換できるとでも思ってのかい?w
371:名無しさん@お腹いっぱい。
18/06/10 16:23:33.86 .net
データ | フィルタ | シェルスクリプト(関数なり) | フィルタ > データ
フィルタをどう作るかは具体的じゃないとでCVSしか例にあげてないからCVSなだけなんだが
っていういたって普通のことなのに。そうじゃないナニかを想定しているらしけど、そのナニかの具体的なことは全く言わずに指摘wという否定なだけだもんな
その指摘もトンチンカンなこともあり、ただただ無闇に偉ぶりたいだけにしか見えんなあ
372:名無しさん@お腹いっぱい。
18/06/10 16:24:15.94 .net
>>357
仕様よんでこい
URLリンク(www.kasai.fm)
CSVの仕様においてエスケープとは
ダブルクォート " を "" と二つ連続させるものだ
\記号でエスケープする仕様はない
373:名無しさん@お腹いっぱい。
18/06/10 16:25:32.32 .net
>>360
それは最初&最終形態だよ。途中で処理の都合のよいようにするのに仕様もなんもないわっ
マジあほとしか思えない
374:名無しさん@お腹いっぱい。
18/06/10 16:26:22.60 .net
もう一つ解説記事
URLリンク(codezine.jp)
> 改行コードはプラットフォームによって異なります。一般的にWindowsは
> <CR><LF>、UNIXは<LF>です。
> ※2008/04/16追記:RFCでは末尾(レコードの区切りとして)の改行は
> <CR><LF>を推奨しています。CSVを解釈するプログラムではどちらの
> 改行コードでも読めるように作ることをお勧めします
> ダブルクォートで囲む場合
> "山田","太郎","値に
> 改行や,カンマや""ダブルクォートが含まれても問題ありません。"
> まれにCSVの方言で\エスケープを行うことがあります。
>
>\エスケープを行う特殊な例
>"山田","太郎","値に改行\nや\,カンマや\"ダブルクォートが含まれても問題ありません。"
> この方言はあまり普及していませんので、利用するのは避けましょう。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
375:名無しさん@お腹いっぱい。
18/06/10 16:26:49.29 .net
>>361
最終形態とか何いってんだ?
RFCの仕様の話をしている
376:名無しさん@お腹いっぱい。
18/06/10 16:27:48.82 .net
>>363
シェルスクリプトでどう扱うかだぞ?処理をどうするかだぞ?なに言ってるの?プログラミング知らないの?
377:名無しさん@お腹いっぱい。
18/06/10 16:28:23.86 .net
CSVスレになってんのはなぜなんだ
勉強にはなるけど
378:名無しさん@お腹いっぱい。
18/06/10 16:28:48.64 .net
もう一つw
URLリンク(www.upken.jp)
> RFC4180準拠
> 基本
> ヘッダーはあってもなくてもよい
> 空データフィールドがある
> 前後にスペースがあっても無視しない
> ダブルクォーテーションで囲む場合は同じレコードのすべてのフィールドをダブルクォーテーションで囲む
> 改行、ダブルクォーテーション、カンマを含むフィールドは、ダブルクォーテーションで囲むべき
> ダブルクォーテーションで囲まれているフィールドでダブルクォーテーションを使用する場合は、ダブルクォーテーションでエスケープする
>
379:非常に長い文字列を考慮 > 複合パターン
380:名無しさん@お腹いっぱい。
18/06/10 16:29:45.29 .net
>>364
> シェルスクリプトでどう扱うかだぞ?
CSVを扱うという話はしてない
\ でエスケープするのは遅くて無駄という話ならしたがね
381:名無しさん@お腹いっぱい。
18/06/10 16:31:47.04 .net
>>367
お前はどうかしてる。ここにきてCVSの仕様を得意げにあげてるのと同じヤツってことはないよな?
382:名無しさん@お腹いっぱい。
18/06/10 16:34:02.42 .net
>>358
左手でつり革に捕まっていても、左手で痴漢できるそうですよ
日本の裁判所は素晴らしいです
383:名無しさん@お腹いっぱい。
18/06/10 16:35:15.34 .net
>>368
どうかしてるって言うなら、答えを書きなよ
なんど言われれば分かるんだ?
384:名無しさん@お腹いっぱい。
18/06/10 16:36:40.96 .net
>>368
CSVの仕様を得意げにーっていうのは
> 因みにCSVはRFCで「内部改行はCRLF」と定まっているので
↑こいつのことですかな?w
まあ、RFCでCRLFと決まってないんですがw
385:名無しさん@お腹いっぱい。
18/06/10 16:36:59.71 .net
>>370
答えって...だいたい想像できるだろう。めんどくさいだけで
お前のやり方がわからんわ。指摘するお前が出せよw
386:名無しさん@お腹いっぱい。
18/06/10 16:39:16.71 .net
>>372
「だいたい」しか「想像」出来てないのに偉そうだなおい
かけないんだろう?だから人にいちゃもんつけるだけなんだろ
いい加減ごめんなさいって言った方がいいぞ?
387:名無しさん@お腹いっぱい。
18/06/10 16:39:21.31 .net
1データの中に改行が含まれてる
そのままだとデータ区切りの改行と見分けがつかない
CSV形式の話はしていない
\nにエスケープする方法では、1データずつ処理しなければならず
外部コマンド呼び出しの必要があるから遅い
ここまでは理解できてんのかなー?
388:名無しさん@お腹いっぱい。
18/06/10 16:39:51.59 .net
>>371
いや、お前のこと。たぶん
それは単に利用できそうなキーポイントでそれを利用してって話でしかないな
たぶん、お前だろうが、得意げには仕様が絶対でどうであれ利用しちゃダメっていう変なヤツ
389:名無しさん@お腹いっぱい。
18/06/10 16:40:34.63 .net
>>375
俺は最初からCSV形式のデータを扱う話なんかしてないんですが?