シェルスクリプトに関する総合スレッドです。
全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。
前スレ:
シェルスクリプト総合 その29
https://mevius.5ch.net/test/read.cgi/tech/1537540487/
探検
シェルスクリプト総合 その30
レス数が1000を超えています。これ以上書き込みはできません。
2019/07/01(月) 23:04:27.02ID:/rKj5XUf
967デフォルトの名無しさん
2019/08/11(日) 00:25:40.31ID:GFStkW/c おい、ついてこいよw
せっかくPOSIX以外の話もしてるんだから
せっかくPOSIX以外の話もしてるんだから
968デフォルトの名無しさん
2019/08/11(日) 00:27:49.34ID:vE4Lr4uN なんで「誰もが」興味があると思うのか
969デフォルトの名無しさん
2019/08/11(日) 00:29:16.73ID:GFStkW/c 関数定義の構文も違ってるみたいだ
https://fishshell.com/docs/current/tutorial.html#tut_functions
https://fishshell.com/docs/current/tutorial.html#tut_functions
970デフォルトの名無しさん
2019/08/11(日) 02:09:43.49ID:EariAe7h >>714-732
Ruby で作った
require "csv"
options = { :headers => true, :col_sep => "\t" }
table_1 = CSV.read( "hoge.tsv", options ) # 読み込み
table_2 = CSV.read( "huga.tsv", options ) # 読み込み
CSV.open( "hoge_huga.tsv", "w", options ) do |csv| # 書き込み
csv << %w(a b c d e) # header
table_1.zip( table_2 ).each do |one, two|
csv << [ one[ "a" ], one[ "b" ], two[ "c" ], two[ "d" ], one[ "e" ] ]
end
end
Ruby で作った
require "csv"
options = { :headers => true, :col_sep => "\t" }
table_1 = CSV.read( "hoge.tsv", options ) # 読み込み
table_2 = CSV.read( "huga.tsv", options ) # 読み込み
CSV.open( "hoge_huga.tsv", "w", options ) do |csv| # 書き込み
csv << %w(a b c d e) # header
table_1.zip( table_2 ).each do |one, two|
csv << [ one[ "a" ], one[ "b" ], two[ "c" ], two[ "d" ], one[ "e" ] ]
end
end
971デフォルトの名無しさん
2019/08/11(日) 02:44:21.08ID:GFStkW/c >>970
勘違いしてるぞ。明確に書いてはないかもしれんが a b c d e はヘッダじゃなくてデータだ。
eachは不要。あといつになったら、その古いハッシュの書き方をやめるんだ?
訂正版
require 'csv'
options = { col_sep: "\t" }
table1 = CSV.read('hoge.tsv', options)
table2 = CSV.read('huga.tsv', options)
CSV.open('hoge_huga.tsv', 'w', options) do |csv|
table1.zip(table2) do |one, two|
csv << [one[0], one[1], two[0], two[1], one[2]]
end
end
勘違いしてるぞ。明確に書いてはないかもしれんが a b c d e はヘッダじゃなくてデータだ。
eachは不要。あといつになったら、その古いハッシュの書き方をやめるんだ?
訂正版
require 'csv'
options = { col_sep: "\t" }
table1 = CSV.read('hoge.tsv', options)
table2 = CSV.read('huga.tsv', options)
CSV.open('hoge_huga.tsv', 'w', options) do |csv|
table1.zip(table2) do |one, two|
csv << [one[0], one[1], two[0], two[1], one[2]]
end
end
972デフォルトの名無しさん
2019/08/11(日) 03:58:29.22ID:FACDvm3m 偉ぶりたい満々やな
973デフォルトの名無しさん
2019/08/11(日) 04:23:39.41ID:GTeyRs5o 長いと大変そう
ruby にもこういうのありそう
DB<8> @a = qw(a b e)
DB<9> splice @a, 2, 0, qw(c d)
DB<10> print @a
abcde
ruby にもこういうのありそう
DB<8> @a = qw(a b e)
DB<9> splice @a, 2, 0, qw(c d)
DB<10> print @a
abcde
974デフォルトの名無しさん
2019/08/11(日) 04:38:47.36ID:++HFlOfG >>973
それがRubyにはPerlやJavaScriptみたいなspliceがないんだよね
でも今回は、挿入するだけだから、 csv << one.insert(2, *two) が使えるね
順番をもっと柔軟に変えたいってなると面倒だけど
それがRubyにはPerlやJavaScriptみたいなspliceがないんだよね
でも今回は、挿入するだけだから、 csv << one.insert(2, *two) が使えるね
順番をもっと柔軟に変えたいってなると面倒だけど
975デフォルトの名無しさん
2019/08/11(日) 05:27:14.15ID:oR4Xkpxd >>660
そういやこんなのはいかんの?
てか、こういう答え既に出た?
#!/bin/sh
cf=0
for f
do
if [[ cf -eq 0 ]]; then
cf=1
else
echo -n ','
fi
echo -n "x${f}z"
done
echo ''
そういやこんなのはいかんの?
てか、こういう答え既に出た?
#!/bin/sh
cf=0
for f
do
if [[ cf -eq 0 ]]; then
cf=1
else
echo -n ','
fi
echo -n "x${f}z"
done
echo ''
976デフォルトの名無しさん
2019/08/11(日) 16:04:36.86ID:++HFlOfG >>975
echo -n はPOSIX準拠ではない。が、メンテナンスが続いている最新シェルはすべてサポートされている
と思っていたんだが、上の方で出てるboshが対応してなかったわw
やっぱりprintfを使うのが一番なんだろうな
echo -n はPOSIX準拠ではない。が、メンテナンスが続いている最新シェルはすべてサポートされている
と思っていたんだが、上の方で出てるboshが対応してなかったわw
やっぱりprintfを使うのが一番なんだろうな
977デフォルトの名無しさん
2019/08/11(日) 16:19:01.34ID:++HFlOfG 改めて調べ直してみたら、yashも-nに対応してなかった。
echo -n aaa ってやったら、 -n aaa って出力される。
単純な出力以外printfばっかり使ってたから忘れてたw
echo -n aaa ってやったら、 -n aaa って出力される。
単純な出力以外printfばっかり使ってたから忘れてたw
978デフォルトの名無しさん
2019/08/11(日) 16:34:27.13ID:++HFlOfG > if [[ cf -eq 0 ]]; then
bash依存する必要がないのに、bash依存してる例
bash依存する必要がないのに、bash依存してる例
979デフォルトの名無しさん
2019/08/11(日) 16:44:43.77ID:k+c7cOcw 重箱の隅が気になって仕方がないのね
そういうのは原理主義者としか思えないけどw
適切なスレが別にあるとわかったんだからそっちでどうぞ
そういうのは原理主義者としか思えないけどw
適切なスレが別にあるとわかったんだからそっちでどうぞ
980デフォルトの名無しさん
2019/08/11(日) 16:45:13.10ID:2JPwQqrg やっぱりどこでも動くシェルスクリプトなんて幻想なんだね
981デフォルトの名無しさん
2019/08/11(日) 16:52:18.97ID:lm+uP+yI bash で書くならシェバンで明示するべし
#!/usr/bin/env bash
#!/usr/bin/env bash
982デフォルトの名無しさん
2019/08/11(日) 17:03:10.35ID:k+c7cOcw 間違いはそこだよなあ。単に
#!/bin/bash
と書こうとして、うっかり
#!/bin/sh
にしてしまった感じかな
#!/bin/bash
と書こうとして、うっかり
#!/bin/sh
にしてしまった感じかな
983デフォルトの名無しさん
2019/08/11(日) 17:34:07.21ID:++HFlOfG >>979
debianはbash依存をなくすのに苦労したらしいからね。
https://wiki.ubuntu.com/DashAsBinSh
> The major reason to switch the default shell was efficiency.
デフォルトシェルを(dash)に変更する理由は効率性です。
> Programs should be written to the standard,
>and if they use extensions they should declare them;
プログラムは標準で書くべきである。拡張を使うなら宣言しなさい。
正しい言葉だ。
拡張を使う理由がないのに効率性を落とす意味ないからね。
debianはbash依存をなくすのに苦労したらしいからね。
https://wiki.ubuntu.com/DashAsBinSh
> The major reason to switch the default shell was efficiency.
デフォルトシェルを(dash)に変更する理由は効率性です。
> Programs should be written to the standard,
>and if they use extensions they should declare them;
プログラムは標準で書くべきである。拡張を使うなら宣言しなさい。
正しい言葉だ。
拡張を使う理由がないのに効率性を落とす意味ないからね。
984デフォルトの名無しさん
2019/08/11(日) 17:41:28.14ID:++HFlOfG >>980
どこでも動くために、POSIXに準拠することの大切さがわかるよね。
どこでも動くために、POSIXに準拠することの大切さがわかるよね。
985デフォルトの名無しさん
2019/08/11(日) 17:42:11.13ID:++HFlOfG986デフォルトの名無しさん
2019/08/11(日) 17:46:23.18ID:k+c7cOcw 傲慢だな。そうじゃないと今までの自分のレスが馬鹿みたいだから...
知らないのかもしれないが、/bin/sh が bash の場合、ちゃんとは動かない
てか、あっちのスレを行けよ
知らないのかもしれないが、/bin/sh が bash の場合、ちゃんとは動かない
てか、あっちのスレを行けよ
987デフォルトの名無しさん
2019/08/11(日) 17:49:05.08ID:k+c7cOcw ああ、/bin/sh が bash で、しかも、bash が 3.x の場合かもしれない
/bin/sh が bash であっても、#!/bin/sh だと>>975のスクリプトはうまく動かないのはね。なので、うっかりとしか思えんな
/bin/sh が bash であっても、#!/bin/sh だと>>975のスクリプトはうまく動かないのはね。なので、うっかりとしか思えんな
988デフォルトの名無しさん
2019/08/11(日) 17:50:38.09ID:++HFlOfG > /bin/sh が bash の場合、ちゃんとは動かない
だからちゃんと動かないコードを直すべきでは?
/bin/shはdash, bash, ash, ksh, zsh, mksh のいずれかの可能性がある(他にもあるかもしれない)
だからちゃんと動かないコードを直すべきでは?
/bin/shはdash, bash, ash, ksh, zsh, mksh のいずれかの可能性がある(他にもあるかもしれない)
989デフォルトの名無しさん
2019/08/11(日) 17:51:46.41ID:k+c7cOcw990デフォルトの名無しさん
2019/08/11(日) 17:57:05.79ID:++HFlOfG991デフォルトの名無しさん
2019/08/11(日) 17:59:38.45ID:++HFlOfG >>989
/bin/shのシンボリックリンクの実体がbash、
つまりposixモードの話をしてるのかもしれないけど、
posixモード(set -o posix)であっても [[ ]] は認識しちゃうからね。
bashのposixモードは、挙動の違いをposixに合わせるだけで
posixにはない拡張機能を無効にすることはないみたい。
/bin/shのシンボリックリンクの実体がbash、
つまりposixモードの話をしてるのかもしれないけど、
posixモード(set -o posix)であっても [[ ]] は認識しちゃうからね。
bashのposixモードは、挙動の違いをposixに合わせるだけで
posixにはない拡張機能を無効にすることはないみたい。
992デフォルトの名無しさん
2019/08/11(日) 18:01:22.10ID:++HFlOfG993デフォルトの名無しさん
2019/08/11(日) 18:01:36.14ID:k+c7cOcw #!/bin/sh
てか、sh とコマンド打って起動してでも、echo -n hello は -n hello と表示されるんだなあ。うちのはw
type echo しても echo is a shell builtin だしね。てか、/bin/echo は -n が効くやつだけど
てか、sh とコマンド打って起動してでも、echo -n hello は -n hello と表示されるんだなあ。うちのはw
type echo しても echo is a shell builtin だしね。てか、/bin/echo は -n が効くやつだけど
994デフォルトの名無しさん
2019/08/11(日) 18:02:28.72ID:k+c7cOcw ちなみに、bash --posix で起動しても echo -n hello は -n hello にはならん、なぞww
995デフォルトの名無しさん
2019/08/11(日) 18:07:05.61ID:++HFlOfG > echo -n hello は -n hello と表示されるんだなあ。
POSIXのechoには-nはないからね。-nに依存するコードを書いてはいけない。
POSIX準拠で書く理由が増えたね。
POSIXのechoには-nはないからね。-nに依存するコードを書いてはいけない。
POSIX準拠で書く理由が増えたね。
996デフォルトの名無しさん
2019/08/11(日) 18:07:37.64ID:k+c7cOcw 誰かさんも使ってると言っていた環境なんだけどなw
$ which sh
/bin/sh
$ ls -l /bin/sh
-r-xr-xr-x 1 root wheel 618480 5 4 16:05 /bin/sh
$ sh --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin18)
Copyright (C) 2007 Free Software Foundation, Inc.
$ sh
$ echo -n hello
-n hello
$ exit
exit
$ bash --posix
$ echo -n hello
hello$
$ which sh
/bin/sh
$ ls -l /bin/sh
-r-xr-xr-x 1 root wheel 618480 5 4 16:05 /bin/sh
$ sh --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin18)
Copyright (C) 2007 Free Software Foundation, Inc.
$ sh
$ echo -n hello
-n hello
$ exit
exit
$ bash --posix
$ echo -n hello
hello$
997デフォルトの名無しさん
2019/08/11(日) 18:08:18.76ID:++HFlOfG998デフォルトの名無しさん
2019/08/11(日) 18:08:27.92ID:k+c7cOcw >>995
自説の繰り替えしだけか。しょうもない
自説の繰り替えしだけか。しょうもない
999デフォルトの名無しさん
2019/08/11(日) 18:09:01.47ID:k+c7cOcw >>997
よく読めよ。都合が悪くて妄想モードか?
よく読めよ。都合が悪くて妄想モードか?
1000デフォルトの名無しさん
2019/08/11(日) 18:09:45.54ID:lm+uP+yI 1000!
10011001
Over 1000Thread このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 40日 19時間 5分 18秒
新しいスレッドを立ててください。
life time: 40日 19時間 5分 18秒
レス数が1000を超えています。これ以上書き込みはできません。
ニュース
- ファミマ「遊べるコンビニ」へ ゲーム機を5000店舗に設置方針 IP強化 [七波羅探題★]
- 【赤坂サウナ火災】非常ベル電源「2年前から入れていない」、押した形跡も ★2 [ぐれ★]
- 【野球】WBC、録画放送含め地上波中継なし (ネットフリックス) ★2 [阿弥陀ヶ峰★]
- 日中関係改善は「下手をすると10年かかる」 トランプを全面信頼できない高市官邸の苦悩★4 [ぐれ★]
- 牛丼チェーン店で5杯食べ終えて「支払えない」…詐欺容疑で逮捕の男「どうしても腹がすいて」 甲府 [蚤の市★]
- ホンダ、日中で生産停止へ 半導体不足、北米に続き [蚤の市★]
- 【実況】博衣こよりのえちえちダンガンロンパ4🧪
- ぺこヴィヴィ🐰💅✨初対面同接16万❗❗🏡
- 【実況】博衣こよりのえちえちダンガンロンパ4🧪
- 【高市朗報】aespa、紅白出場の予定に変更なし。NHK「問題なしと判断」 [957955821]
- 【実況】博衣こよりのえちえちダンガンロンパ3🧪
- 【悲報】フィンランド首相「日本人の皆さんだけにお詫びします。他の国は知らんwww」→日本人「これは許した!」 [354616885]
