- 1 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/20(月) 12:07:26.41 .net]
- シェルスクリプトの総合スレです。
□お約束 ・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。 bash/zsh/ksh/ashなどに依存する場合は明示しましょう。 Linuxユーザは/bin/shの正体がbashまたはdashなので特に注意。 FreeBSDユーザは/bin/shの正体がashなので注意。 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の方が適した処理にはそちらを使いましょう。 ・知らないコマンドが出てきたらmanを引きましょう。 ・思い通りに動かないときは、まずは sh -x でトレースしましょう。 □回答者への注意事項: ・シェルスクリプトでの処理方法を質問しているのに、よくわからずに 「そういうのはperl使いましょう」と回答するのはやめましょう。 安易にperlに逃げずにシェルスクリプトで処理するのが頭のいいやり方。 前スレ シェルスクリプト総合 その25 echo.2ch.net/test/read.cgi/unix/1439563321/
- 352 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/21(木) 06:12:05.17 .net]
- $ ls */*
と入力したところで ESC \C-e をタイプするとエイリアスが展開され \C-x* をタイプするとワイルトカードが展開される
- 353 名前:名無しさん@お腹いっぱい。 mailto:344 [2017/09/21(木) 06:21:42.53 .net]
- すまん、bash限定
- 354 名前:名無しさん@お腹いっぱい。 [2017/09/21(木) 07:24:19.18 .net]
- >>343
$ set -x $ ls */* >/dev/null
- 355 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/21(木) 08:38:01.77 .net]
- >>346 -- >>348
ありがとうございます。しかしできればエイリアスごと展開したいのです。 >>349 おわ!まさにこんな感じです。多分コマンドプロンプト関連の命令群も一緒に出力されますが,これはまあ awk か何かで頑張って切り取ります。一応 zsh,bash,dash で確認できました。
- 356 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/26(火) 02:43:18.09 .net]
- >>333
set -u 便利ですね ~/.bashrcに書こうかしら とくに弊害ないですよね?
- 357 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/28(木) 10:22:22.57 .net]
- すいません。わかるかたいたら教えてください。
基本的にカンマ区切りの行なのですが、1列目が""で囲まれ、"aaa,bbb,ccc"のように なることがあります。 1列目のみに発生します。 この1列目のケースだけ、カンマをスペース等に置換したいと思っています。 イメージはこうです。 "aaa,bbb,ccc",AAAA,BBBB,CCCC aaa,AAAA,DDDD,EEEE ↓ "aaa bbb ccc",AAAA,BBBB,CCCC aaa,AAAA,DDDD,EEEE 理由はエクセルに取り込むときにずれてしまうためです。 awkで出来た気がするのですが、うまく出来ません。 どなたか心当たりないでしょうか。
- 358 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/28(木) 10:41:01.84 .net]
- Excelならダブルクオートちゃんと扱うはずだよ
勘違いか、変な文字入ってない?
- 359 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/28(木) 11:09:26.14 .net]
- テキストをコピーして貼り付ける時にカンマ区切りでバラすように貼り付けると囲んでてても関係なくバラさなかったっけ?
- 360 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/28(木) 11:10:20.00 .net]
- そんなことなかったわ
- 361 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/28(木) 11:41:08.89 .net]
- もっとうまく書けそうな気がするものの
perl -pe 'if (/^"/) { @f = split/"/, $_, 3; $f[1] =~ s/,/ /g; $_ = join "\"", @f }'
- 362 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/28(木) 12:17:55.02 .net]
- awkとBEGINで昔出来た記憶があるのですが。上手くいかず。
>>353 あれ、確かにEXCELには想定ではれました、すいませんさっきも同じにようにはったつもりで、ばらされたのですが。 >>356 一行Perlの文法の意味はわかりませんが、確かに出来ました!
- 363 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/28(木) 22:34:38.91 .net]
- 区切り文字を"にして配列に取り込んで,を に置換えた後、最初と最後に"を追加する
perl -F\" -anle '$F[1] =~ s/,/ /g; $F[1] =~ s/(.+)/\"$1\"/; print @F' awkでは awk 'BEGIN {FS="\""; OFS="\""} {gsub(","," ",$2); print $0}' でいいような、なんか自信ないけど
- 364 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/28(木) 22:48:57.65 .net]
- GNU awk の FPAT を使ってこんな感じで
gawk -vFPAT='(".+?"|[^,]*)' -vOFS=, '{gsub(/,/," ",$1);print}' data.csv
- 365 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/29(金) 04:05:27.30 .net]
- perl -pe 's/^("[^"]*")/$1=~s|,| |gr/e'
- 366 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/29(金) 16:42:39.76 .net]
- perl -pe 's/,(?=.*\")/ /g'
- 367 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/29(金) 17:03:38.90 .net]
- suge-
- 368 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/30(土) 13:09:25.90 .net]
- >>352
#!/bin/sh IFS=\" while read X Y Z ; do if [ "$X" = "" ] ; then echo -n \"$Y\" | sed 's/,/ /g' echo $Z else echo $X fi done
- 369 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/02(月) 11:37:31.18 .net]
- sed '/^"[^"]*"/{H;s///;x;s/\n//;s/^\("[^"]*"\).*/\1/;s/,/ /g;G;s/\n//;}'
- 370 名前:名無しさん [2017/10/12(木) 11:03:43.53 .net]
- bashで変数展開するときに、名前末尾にハイフン付けるのはどういう意味なんでしょうか?
${abc-}
- 371 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/12(木) 13:43:34.47 .net]
- >>365
https://linuxjm.osdn.jp/html/GNU_bash/man1/bash.1.html#lbBB
- 372 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/12(木) 14:06:07.63 .net]
- 今まさにそのページ読んでたけど、:いるよな
ナシの使い方なんてあったっけか
- 373 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/12(木) 16:13:02.77 .net]
- > コロンを省略した場合には設定されているかどうかのみを調べます。
- 374 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/12(木) 16:37:37.56 .net]
- 何度か読み返してようやく理解した
unsetされてるか空値が入ってるかの違いに対応出来るのか
- 375 名前:名無しさん@お腹いっぱい。 [2017/10/13(金) 18:57:11.77 .net]
- ログイン時に読み込まれる ~/.profile ファイルは,「誰が」読み込んでいるのでしょうか。
普通 sh もしくはその代替シェルかなと思うのですが,実際はどうなのか気になります。 というのも,私が普段使っている Debian GNU/Linux ではデフォルトシェルは bash に指定しているのですが,~/.profile の中に bash っぽい変数 (${HOGE} という書き方) があったので。
- 376 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/13(金) 19:08:59.70 .net]
- >>366読んでみたらいいじゃない
起動のところ
- 377 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/13(金) 19:12:36.61 .net]
- ${HOGE}はbashに限らないよ
- 378 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/14(土) 00:33:15.35 .net]
- >>372
誰へのレス?
- 379 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/14(土) 00:33:50.98 .net]
- >>370
Linuxの質問はLinux板で
- 380 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/14(土) 00:37:55.44 .net]
- >>370
くだらねえ質問はここに書き込め!Part 229 mao.5ch.net/test/read.cgi/linux/1505217859/ 初心者の質問相談にやさしく答えるスレ Part9 mao.5ch.net/test/read.cgi/linux/1504269873/
- 381 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/14(土) 00:56:47.50 .net]
- >>370
もしかしてこの人? https://mao.5ch.net/test/read.cgi/linux/1504269873/343
- 382 名前:370 mailto:sage [2017/10/14(土) 00:58:01.90 .net]
- あぁ、すまん
>>371へのレスか たしかに${HOGE}記法はたいていのshで使えるね
- 383 名前:370 mailto:sage [2017/10/14(土) 00:58:50.55 .net]
- >>371じゃなくて>>370か、、、
- 384 名前:名無しさん@お腹いっぱい。 [2017/10/20(金) 11:02:46.23 .net]
- >>377
何を言ってるのがわからん。bshが元祖なのに。
- 385 名前:370 mailto:sage [2017/10/20(金) 17:00:36.31 .net]
- 余計なレスだったんでわからんならわからんでいいよ
- 386 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/21(土) 01:22:29.89 .net]
- スレチ気味だけど,ある種の Shell って,
$ cd /////// みたいなことをするとルートディレクトリだと認識するんだな。 個人的に ~ がすごく打ちにくい位置にあるので // を ~ だと解釈させようと試行錯誤してるときに発見した。 これはルートディレクトリが特別って訳じゃなく, $ ls /usr////bin/////// みたいなことでも問題ない。ということは // == ~ にすることは Shell のソース弄るくらいしか方法がないということになる。 俺みたいな無駄な努力をしないために残す
- 387 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/21(土) 01:32:07.61 .net]
- それシェルの機能じゃなくね?
- 388 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/21(土) 01:36:03.89 .net]
- こういうのも開けるし
https://mevius.5ch.net///test////read.cgi/////unix//////1489979246///////l50
- 389 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/21(土) 08:08:40.09 .net]
- もしかして RFC とかで実装が統一されてんのか。
- 390 名前:370 mailto:sage [2017/10/21(土) 14:49:37.55 .net]
- >>381
cdについてはPOSIXで決まっている pubs.opengroup.org/onlinepubs/9699919799/utilities/cd.html の8のc >>382 シェル一部であるcdコマンドの機能 >>383 それはまた別の話
- 391 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/21(土) 14:51:29.58 .net]
- $ /bin/echo /usr////bin///////
/usr////bin/////// $ となるので、lsについてはシェルが解釈してるわけではなくlsが解釈していると思われる
- 392 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/21(土) 14:55:41.90 .net]
- まあ//を~にしたいならシェルのキーバインド使えばいいんじゃないですかね
- 393 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/21(土) 15:01:35.03 .net]
- ちなみにこんなんなったりする
シェルの種類によって挙動は違うかも $ cd // $ pwd // $ 理由は www.unixguide.net/unix/bash/E10.shtml
- 394 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/21(土) 15:03:36.25 .net]
- キーバインドいじっちゃうと
「http://」を打とうとして「http:~」になったりして困らないか
- 395 名前:名無しさん@そうだ選挙に行こう! Go to vote! mailto:sage [2017/10/22(日) 16:52:10.67 .net]
- >>385
「An implementation may」だから必ずではないのでは
- 396 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/22(日) 21:04:49.39 .net]
- 必ずって言ったっけ
- 397 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/22(日) 21:24:08.21 .net]
- bashはパス中の複数の/を一つにするはず
- 398 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/22(日) 22:40:16.51 .net]
- >>392
>>388
- 399 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/26(木) 13:24:16.45 .net]
- ファイルをリネームしてコピーし続けるスクリプトなんですが
コマンドが見つからないと出てよくわかりません #/bin/sh PATH='/var/log/' PATH2='dnsmasq.log' DOT='.' for i in 6 5 4 3 2 1 do PATH3=$PATH$PATH2$DOT$i PATH4=`expr $i - 1` PATH5=$PATH$PATH2$DOT$PATH4 mv $PATH5 $PATH3 done PATH6=0 mv $PATH$PATH2 $PATH$PATH2$PATH6 exit 0
- 400 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/26(木) 13:29:36.84 .net]
- >>394
for VAR in ARGS; do command; done
- 401 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/26(木) 13:30:47.44 .net]
- sh -xで実行してみると以下の通り出力されました
+ PATH=/var/log/ + PATH2=dnsmasq.log + DOT=. + PATH3=/var/log/dnsmasq.log.6 + expr 6 - 1 ./splitLog.sh: 1: ./splitLog.sh: expr: not found + PATH4= + PATH5=/var/log/dnsmasq.log. + mv /var/log/dnsmasq.log. /var/log/dnsmasq.log.6 ./splitLog.sh: 12: ./splitLog.sh: mv: not found (省略) + PATH3=/var/log/dnsmasq.log.1 + expr 1 - 1 ./splitLog.sh: 1: ./splitLog.sh: expr: not found + PATH4= + PATH5=/var/log/dnsmasq.log. + mv /var/log/dnsmasq.log. /var/log/dnsmasq.log.1 ./splitLog.sh: 12: ./splitLog.sh: mv: not found + PATH6=0 + mv /var/log/dnsmasq.log /var/log/dnsmasq.log0 ./splitLog.sh: 17: ./splitLog.sh: mv: not found + exit 0
- 402 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/26(木) 13:46:18.65 .net]
- とりあえず何がしたいかを書け
そんな汚いもん見せられても何がしたいのか分かりにくい
- 403 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/26(木) 13:51:57.00 .net]
- PATH潰すんなら外部コマンドはフルパスで書かんと
- 404 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/26(木) 14:02:38.34 .net]
- フルパスで書かないといけなかったんですね…
- 405 名前:修正してみたらできました、ありがとうございます! []
- [ここ壊れてます]
- 406 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/26(木) 14:11:58.47 .net]
- ようわからんがsavelogコマンドみたいなことがしたいのか
- 407 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/26(木) 14:27:19.72 .net]
- PATHがきしょい
- 408 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/26(木) 15:33:20.43 .net]
- >>399
「フルパスで書かなきゃいけない」のではない $PATHを上書きするのがマズい
- 409 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/26(木) 15:35:16.21 .net]
- これ1〜6までファイル全部消えるんじゃね?
- 410 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/26(木) 15:35:32.78 .net]
- 1から6まで
- 411 名前:400 mailto:sage [2017/10/26(木) 15:37:15.23 .net]
- あ、すまん勘違い
逆だった
- 412 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/26(木) 16:21:22.80 .net]
- 5を6にリネーム~0を1にリネーム
そのあと最新のログを0にリネームじゃないかな どっちにしろゴリ押し感半端ないが
- 413 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/26(木) 16:30:18.25 .net]
- >>402
$PATHって環境変数ですよね… 何故気づかなかったんだろう お恥ずかしい限りです
- 414 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/26(木) 16:37:04.75 .net]
- あーそういうことか、403のお陰でやりたいことは分かった
- 415 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/26(木) 18:34:54.50 .net]
- こうすればわかりやすいですかね
#!/bin/sh DIR=/var/log/ FILE=dnsmasq.log; START=0 for i in `seq 1 6` do DEC=`expr $i - 1` cd $DIR mv "${FILE}.${DEC}" "${FILE}.${i}" done cd $DIR mv $FILE "${FILE}.${START}" exit 0
- 416 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/26(木) 18:56:39.92 .net]
- 毎回cdするのは無駄やろ
- 417 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/26(木) 19:01:29.48 .net]
- 個人的にexpr嫌いなのもあって$(())使っちゃうな
mv "${FILE}.$((i-1))" "${FILE}.$i" あとseq間違ってね? seq 6 1 -1
- 418 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/26(木) 19:25:35.16 .net]
- これだと全部ログ.0になっちゃいますね
ありがとうございます!
- 419 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/28(土) 17:54:16.26 .net]
- logrotateの真似したいのかな
- 420 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/28(土) 19:36:18.05 .net]
- 素直にそっち使った方が楽に出来るよね
- 421 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/28(土) 22:25:53.38 .net]
- そっちを使うほうが楽、ということを学習するにはまずは自分で書いてみて、大変だぜてことを理解しないと
- 422 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/31(火) 13:10:26.11 .net]
- 昔solarisで見たlogrotateはshell scriptだった
どこかで見れれば参考になるかも
- 423 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/31(火) 13:39:18.79 .net]
- あれはあんまりきれいじゃないから参考にしない方がいい
- 424 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/31(火) 13:48:20.70 .net]
- この /usr/lib/newsyslog ね
www.tcp-ip.or.jp/~ikken/intra/check.txt
- 425 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/31(火) 15:47:40.56 .net]
- シェルスクリプト
https://www.apt-browse.org/browse/ubuntu/trusty/main/i386/debianutils/4.4/file/usr/bin/savelog マニュアルページ https://manpages.debian.org/jessie/debianutils/savelog.8.ja.html
- 426 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/11/02(木) 04:12:26.82 .net]
- これ?
https://goo.gl/En6m3D www.bityet.us/s7b47si.jpg
- 427 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/11/03(金) 04:26:36.66 .net]
- X Windows System で,どの IMF が用いられているか判別する方法を考えている。
思い付いたのは $XMODIFIERS 環境変数を用いた case $XMODIFIERS in   *ibus)     local _imf=ibus     ;;   *fcitx)     local _imf=fcitx     ;;   *uim)     local _imf=uim     ;;   *SCIM)     local _imf=scim     ;; esac なんだけど,$XMODIFIERS が必ず設定されているとは限らないし,なんか漏らしてる気がしてならん……。
- 428 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/11/03(金) 04:29:53.86 .net]
- ツールで投稿したら空白がエラいことになった。すまん。
- 429 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/11/03(金) 07:20:14.85 .net]
- Shell Scriptのコメントアウトに
# @(#) Foo is foo. みたいな文字を書いておいて $ what ./foo.sh とやると Foo is foo という表示がでるというようなwhatコマンドがあるらしいのですが 手元のFedora26に見付かりません。($ dnf search what, $ dnf provides what) どこかにありますでしょうか。
- 430 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/11/03(金) 08:32:21.55 .net]
- Linuxの質問はLinux板で
- 431 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/11/03(金) 10:09:39.61 .net]
- >>423
whatはかつて使われていたSCCSというソースコード管理システムに入っていたコマンド 現在はGNU CSSCがSCCSと同等の機能を提供している なのでcsscというパッケージを探す なければhttps://www.gnu.org/software/cssc/へGO!
- 432 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/11/20(月) 15:39:18.57 .net]
- case文で
$1がhogeで、$2がhageの場合のみ処理Aを実行する みたいなのできないでしょうか?
- 433 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/11/20(月) 15:49:53.05 .net]
- 入れ子にすりゃいい
- 434 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/11/20(月) 15:56:36.27 .net]
- $1にも$2にも含まれ得ない文字を区切りにして連結
- 435 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/11/20(月) 16:00:08.82 .net]
- >>425
ありがとうございます。依存地獄に嵌ってしまいあきらめました,教えてもらったのにすいません。 また,御礼がおそくなってもうしわけないです。
- 436 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/11/20(月) 16:22:06.48 .net]
- caseで実装するなら入れ子かね
しかしここでも髪の話するのか
- 437 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/11/20(月) 17:07:40.56 .net]
- >>427
>>428 >>430 入れ子にできることを全然知らず こんな感じかなでやってみたらいけました 皆さん短時間にありがとうございます >>430 他意はありませんw
- 438 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/11/20(月) 18:39:46.60 .net]
- >>430
気にし過ぎだろ さっさと剃れよ
- 439 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/12/02(土) 09:15:00.24 .net]
- すみません、bashでタブ区切りのファイルを配列に取り込む際、空の列が詰めて格納されてしまいます
そうならない方法はあるのでしょうか exec < file.tsv while read LINE do ARRAY=(${LINE}) done
- 440 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/12/02(土) 10:11:05.91 .net]
- >>433
変数の参照部分を引用符で囲むとか。 #!/bin/sh - exec < file.tsv while read LINE; do ARRAY=("$LINE") done echo "$ARRAY" IFS の値を空にするとか。 #!/bin/sh - IFS= exec < file.tsv while read LINE; do ARRAY=($LINE) done echo $ARRAY
- 441 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/12/02(土) 10:16:16.70 .net]
- あ,5ch ってコード貼るのまずいんだっけ。しくったな。
まあこんなくだらないコードに著作権云々関係ないかw
- 442 名前:名無しさん@お腹いっぱい。 [2017/12/02(土) 10:37:47.62 .net]
- >>433
bash なら mapfile がある(別名 readarray) -t オプションで各行末尾の改行を取除く mapfile -t ARRAY <file.tsv
- 443 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/12/03(日) 07:15:44.68 .net]
- 早速検証してみます、ありがとうございます!
- 444 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/12/05(火) 08:37:43.17 .net]
- 検証した結果、IFSを改行のみにして読み込み、その文字列をCutで抜くで達成できました
こうしないと空文字の列が詰まってしまいました IFS_BAK=IFS IFS=$'¥n' exec < file.tsv while read LINE do echo "${LINE}" | cut -f1 >> tmp1.txt echo "${LINE}" | cut -f2 >> tmp2.txt done IFS=IFS_BAK
- 445 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/12/05(火) 09:20:20.37 .net]
- >>438
重箱の隅を突くようで悪いが,その書き方をするならシェバンは #!/usr/bin/bash にしておけ。 $'string' は Bash の独自拡張だった気がする。
- 446 名前:433 [2017/12/06(水) 10:04:48.53 .net]
- >>433
今ごろ勘違いに気づいた mapfileじゃ全然見当外れじゃないか…なんかごめん たとえば IFS=$'\t' line="${IFS}b" このとき a=(${line}) で a=("" "b") となるのを期待しているのだけど、実際にはクオートしていないので a=( b) と同じことになって、先頭の「空の列」は残らない かといってクオートしたら a=("${line}") これはタブ区切りで分割されることなく行全体がそのままになるので意味がない… ということだよね >>438のようにファイルに書き出すだけなら、そう
- 447 名前:やってcutでやるのが扱いやすそうだけど
もしどうしても配列にする必要があるときは、こんな感じでどうだろう https://ideone.com/uPfCwc 空だと消えてしまうなら空にならないよう何か入れとけばいいじゃない(配列にしてから取り除く) という案 [] - [ここ壊れてます]
- 448 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/12/11(月) 05:34:31.40 .net]
- >>440
回答が遅れてすみませんでした なるほど…その手はいけるんですね ありがとうございます、活用させていただきます 自分は今回縛りがあってbashだけでやっているのですが、可能なら他のスクリプトに任すべきかな…(´・ω・`)
- 449 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/12/14(木) 00:31:41.37 .net]
- そこは「他のシェルに」じゃないか
- 450 名前:名無しさん@お腹いっぱい。 [2017/12/29(金) 06:50:06.02 .net]
- 誰でも簡単にパソコン1台で稼げる方法など
参考までに、 ⇒ 『宮本のゴウリエセレレ』 というブログで見ることができるらしいです。 グーグル検索⇒『宮本のゴウリエセレレ』 PPEE18BYYA
- 451 名前:名無しさん@お腹いっぱい。 [2018/01/08(月) 17:53:30.81 .net]
- はじめまして
早速で申し訳ないのですが、以下のシェルスクリプトでdoを含むコマンドが一切使用できません。理由と解決策を教えてください。 #!/bin/sh dir=`dirname ${0}` echo -n "探す拡張子=" read que ans=$(find ${dir} -name *.${que} | awk -F/ '{print $NF}') if [ -z "${ans}" ];then echo "${que}は見つかりませんでした。\n終了します。" exit else echo "${ans}" fi
- 452 名前:名無しさん@お腹いっぱい。 [2018/01/08(月) 17:59:26.22 .net]
- >>444
すみません訂正します。 select文のみどこに書いてもSyntax error: "do" unexpectedというエラー出てしまいます。
|

|