シェルスクリプトに関する総合スレッドです。
全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。
前スレ:
シェルスクリプト総合 その28
http://mevius.5ch.net/test/read.cgi/tech/1532397676/
シェルスクリプト総合 その29
■ このスレッドは過去ログ倉庫に格納されています
2018/09/21(金) 23:34:47.98ID:/eJt2TVD
2018/09/21(金) 23:36:59.94ID:/eJt2TVD
お約束
・特記なき場合、Bourne ShellもしくはPOSIX準拠のsh可換シェルが既定です
つまりシバンは#! /bin/shです。
他のシェル(bash, zsh, ksh, (d)ash, yash, posh, fish, (t)csh)などの専用機能に依存する場合は明示しましょう。
OS X, GNU/Linuxユーザーは/bin/shの実体がbashなので*特に*注意(自覚なきbashism---シバンが#!/bin/shなのにbashに依存する構文を使っていませんか?)。
ただしDebian, Ubuntuなどでは/bin/shの実体はPOSIX sh互換のdashですのであまり気にしないでも大丈夫です。
FreeBSDユーザーは/bin/shの実体がashなので注意。
Solaris, OpenBSDユーザーは/bin/shの実体がkshなので注意。
csh/tcshでのシェルスクリプトは*まったく推奨しません*。
(参考URL: http://www.speech-lab.org/~hiroki/csh-whynot.euc)
・POSIXに準拠しましょう
有用なリンクはhttps://en.wikipedia.org/wiki/POSIXにまとめられています。
最新の仕様はこちらへ: http://pubs.opengroup.org/onlinepubs/9699919799/
(左上の「Shell & Utilities」から各コマンドやファイルの仕様を参照することができます)
・Version 7 UNIXのsh(1)に一番近いのはOpenSolaris由来のHeirloom sh、次点でDebianなどに搭載されているDash shell
Heirloom sh: http://heirloom.sourceforge.net/sh.html
Dash shell: http://gondor.apana.org.au/~herbert/dash/
・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります
Manページや各種リンク(http://pubs.opengroup.org/onlinepubs/9699919799/idx/utilities.htmlなど)を見ましょう。
apropos(1)ないしはman(1)の-kオプションでそれらしい単語による簡単な検索もできます。
・ワイルドカードは正規表現ではありません。
正規表現の話題はスレ違い(正規表現スレへ)
・シェルスクリプトのことをシェルってゆうな
・特記なき場合、Bourne ShellもしくはPOSIX準拠のsh可換シェルが既定です
つまりシバンは#! /bin/shです。
他のシェル(bash, zsh, ksh, (d)ash, yash, posh, fish, (t)csh)などの専用機能に依存する場合は明示しましょう。
OS X, GNU/Linuxユーザーは/bin/shの実体がbashなので*特に*注意(自覚なきbashism---シバンが#!/bin/shなのにbashに依存する構文を使っていませんか?)。
ただしDebian, Ubuntuなどでは/bin/shの実体はPOSIX sh互換のdashですのであまり気にしないでも大丈夫です。
FreeBSDユーザーは/bin/shの実体がashなので注意。
Solaris, OpenBSDユーザーは/bin/shの実体がkshなので注意。
csh/tcshでのシェルスクリプトは*まったく推奨しません*。
(参考URL: http://www.speech-lab.org/~hiroki/csh-whynot.euc)
・POSIXに準拠しましょう
有用なリンクはhttps://en.wikipedia.org/wiki/POSIXにまとめられています。
最新の仕様はこちらへ: http://pubs.opengroup.org/onlinepubs/9699919799/
(左上の「Shell & Utilities」から各コマンドやファイルの仕様を参照することができます)
・Version 7 UNIXのsh(1)に一番近いのはOpenSolaris由来のHeirloom sh、次点でDebianなどに搭載されているDash shell
Heirloom sh: http://heirloom.sourceforge.net/sh.html
Dash shell: http://gondor.apana.org.au/~herbert/dash/
・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります
Manページや各種リンク(http://pubs.opengroup.org/onlinepubs/9699919799/idx/utilities.htmlなど)を見ましょう。
apropos(1)ないしはman(1)の-kオプションでそれらしい単語による簡単な検索もできます。
・ワイルドカードは正規表現ではありません。
正規表現の話題はスレ違い(正規表現スレへ)
・シェルスクリプトのことをシェルってゆうな
2018/09/21(金) 23:39:20.07ID:/eJt2TVD
初心者へのアドバイス
・適した道具を判断するのも頭の重要な使い方。
シェルスクリプトよりもPerlまたはPythonの方が適した処理にはそちらを使いましょう。
・知らないコマンドが出てきたらman(1)を引きましょう。
・思い通りに動かないときは、まずはsh(1)の-xオプションでトレースしましょう。
回答者への注意事項
・相手がシェルスクリプトでの処理方法を質問しているのにもかかわらず、よく知りもせずに、「そういうのはPerl, Python使え」と回答するのはやめましょう。
安易にPerlやPythonに逃げずに小さなコマンドを組み合わせシェルスクリプトで処理するのが頭のいいやり方。
・質問に対して問題が間違ってるといちゃもんをつけるのも避けましょう。
・適した道具を判断するのも頭の重要な使い方。
シェルスクリプトよりもPerlまたはPythonの方が適した処理にはそちらを使いましょう。
・知らないコマンドが出てきたらman(1)を引きましょう。
・思い通りに動かないときは、まずはsh(1)の-xオプションでトレースしましょう。
回答者への注意事項
・相手がシェルスクリプトでの処理方法を質問しているのにもかかわらず、よく知りもせずに、「そういうのはPerl, Python使え」と回答するのはやめましょう。
安易にPerlやPythonに逃げずに小さなコマンドを組み合わせシェルスクリプトで処理するのが頭のいいやり方。
・質問に対して問題が間違ってるといちゃもんをつけるのも避けましょう。
2018/09/21(金) 23:45:34.73ID:/eJt2TVD
2018/09/21(金) 23:48:15.75ID:/eJt2TVD
そして注意書きに従ってください。
…回線切って首釣ってくる
…回線切って首釣ってくる
2019/02/08(金) 12:13:50.02ID:OGIJJ+v/
age
2019/02/08(金) 13:03:01.43ID:VZqJ7QJN
8デフォルトの名無しさん
2019/02/09(土) 15:41:36.60ID:6/bHpQ6m 回線って言葉の定義によるが、今どきの優先での光とかでも回線とは言う。光回線とかね。
9デフォルトの名無しさん
2019/02/09(土) 15:41:50.96ID:6/bHpQ6m 優先じゃなくて有線
2019/02/09(土) 22:28:27.73ID:ksUvHKJZ
printfのフォーマットについてなんだけど
printf '%05d' '33' → 00033
みたいなゼロ埋めってどのシステムでもサポートされているのかな。
%5dみたいな記述はPOSIXの仕様書に在ったから確実だけど
ゼロ埋めフラグについて何の言及もしてないっぽいんだよね。
%gとかと違って「実装を要求しない」とも言っていないし。
printf '%05d' '33' → 00033
みたいなゼロ埋めってどのシステムでもサポートされているのかな。
%5dみたいな記述はPOSIXの仕様書に在ったから確実だけど
ゼロ埋めフラグについて何の言及もしてないっぽいんだよね。
%gとかと違って「実装を要求しない」とも言っていないし。
2019/02/15(金) 12:20:14.92ID:8DR6dyZB
あ。自決。
よーく読んでもっつーか普通に書いてあったわ。
よーく読んでもっつーか普通に書いてあったわ。
2019/02/15(金) 23:18:53.00ID:Hwu/ac/i
結論を書いてから死ぬんだ
13デフォルトの名無しさん
2019/02/16(土) 00:07:44.70ID:FAU3Sbcr 自決か・・・
2019/02/16(土) 01:21:53.36ID:SPTGalft
15デフォルトの名無しさん
2019/02/16(土) 01:31:05.83ID:k5VPqkkr シェルスクリプトで数値を扱うのがおかしい。シェルスクリプトは文字として認識しているから、もともと数値の取り扱いは気をつけないといけない。
2019/02/16(土) 01:35:36.86ID:SPTGalft
そんな事言われましても、シェルスクリプトに
数値計算の機能がありますし
数値計算の機能がありますし
17デフォルトの名無しさん
2019/02/16(土) 02:04:59.47ID:k5VPqkkr2019/02/16(土) 06:28:35.63ID:OVG8+uJO
>>14
なんか勘違いしてね?
俺が言ってるのは0フラグ。
pubs.opengroup.org/onlinepubs/9699919799/utilities/printf.html#tag_20_94_13
ちなみにprintf '%b' '\0ddd'はPOSIXでは8進数しか定められてない
のでその「8進数しか受け付けない」システムは正当。
なんか勘違いしてね?
俺が言ってるのは0フラグ。
pubs.opengroup.org/onlinepubs/9699919799/utilities/printf.html#tag_20_94_13
ちなみにprintf '%b' '\0ddd'はPOSIXでは8進数しか定められてない
のでその「8進数しか受け付けない」システムは正当。
2019/02/16(土) 06:29:08.87ID:OVG8+uJO
2019/02/16(土) 06:56:37.82ID:0pA9DINd
もともと
2019/02/16(土) 08:05:07.54ID:SPTGalft
今のシェルスクリプトの話をしろよ
需要に応じて変わるんだよ
需要に応じて変わるんだよ
2019/02/16(土) 14:10:14.71ID:DdK+9zEs
〃〃∩ _, ,_
⊂⌒( つД´) < ヤダヤダ
`ヽ_ ノ ⊂ノ
ジタバタ
⊂⌒( つД´) < ヤダヤダ
`ヽ_ ノ ⊂ノ
ジタバタ
23デフォルトの名無しさん
2019/02/16(土) 15:55:59.02ID:FAU3Sbcr 昔はよく expr コマンドを使ったものぢゃよ
2019/02/16(土) 16:39:46.54ID:MuF4+GQB
exprは(シェルによるけど)grepみたいな正規表現が単語に対して使えるからすごく重宝してた。
でも最近はそもそもそういう非可搬な機能を使うならbashの[[ <str> ~= "/regexp/" ]]でいいやってなってる。
でも最近はそもそもそういう非可搬な機能を使うならbashの[[ <str> ~= "/regexp/" ]]でいいやってなってる。
25デフォルトの名無しさん
2019/02/21(木) 04:12:08.57ID:UnmnTW3q http://mevius.5ch.net/test/read.cgi/tech/1535194140/l50
わざわざひと月経ってから重複立てた理由は?
わざわざひと月経ってから重複立てた理由は?
2019/02/21(木) 04:19:12.64ID:LAfLZLuz
そっちには特定のOSでしか動かないで存在しないのが入ってるからじゃね。特定のOSの板かスレが相応しいのだろう
2019/02/21(木) 04:24:39.60ID:LAfLZLuz
ああ、特定のOSでしかでもないのか。じゃ、すでに専用スレあるのでってとこか。言葉が違うのに混ぜることもないだろしな
2019/02/22(金) 17:45:17.27ID:W8hCm55w
特定のOS?
29デフォルトの名無しさん
2019/02/23(土) 13:42:47.53ID:9pS68leH 月経の文字に反応
2019/02/25(月) 15:22:22.19ID:uN5/G9fw
受け取った文字列が想定しているものかを判定する場合で
「特定の種類の文字のみ構成されている」かを調べる方法として
↓こういうのを考えてみた
test "$VAR" = "${VAR#*[^a-z]}"
成功したらVARは[a-z]のみで構成されているということ。
あと一応POSIX 2018にも準拠してる。
grep(1)などを用いて処理するより早いと思うんだが
最近のPCは処理が速すぎて今一違いが分からんw
「特定の種類の文字のみ構成されている」かを調べる方法として
↓こういうのを考えてみた
test "$VAR" = "${VAR#*[^a-z]}"
成功したらVARは[a-z]のみで構成されているということ。
あと一応POSIX 2018にも準拠してる。
grep(1)などを用いて処理するより早いと思うんだが
最近のPCは処理が速すぎて今一違いが分からんw
2019/02/25(月) 15:46:48.84ID:jjF3mg4o
case $VAR in
*[^a-z]*) ;; # a-z以外の文字がある
*) ;; # a-zのみで構成
esac
でいいやろ?
置換処理しないから更に速いはず
*[^a-z]*) ;; # a-z以外の文字がある
*) ;; # a-zのみで構成
esac
でいいやろ?
置換処理しないから更に速いはず
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国「国連安保理の許可なしに日本攻撃可能」 Xで旧敵国条項に言及… ★2 [BFU★]
- 立憲・野田代表が主張 台湾有事答弁で「質問者批判は筋違い」「答弁がおかしい」「高市総理迎合のネット世論は危険」★4 [♪♪♪★]
- 【千葉】コンビニに尿入りペットボトル並べた疑い、26歳男「むしゃくしゃして」…購入した客が飲もうとしたところ臭いに違和感 [ぐれ★]
- 中国官製報道「日本経済はもう持たない」にネット民ツッコミ「ニュースだけ見てたら日本はもう百回くらい爆発してる」 [1ゲットロボ★]
- 日中関係悪化で「日本からもうすぐパンダがいなくなる」 中国SNSでトレンド1位に★2 [♪♪♪★]
- 【STARTO ENTERTAINMENT】timelesz、メンバーの不適切言動を謝罪「不用意かつモラルに反した発言であった」 全員の署名入りでコメント [Ailuropoda melanoleuca★]
- 【実況】博衣こよりのえちえちホロ分かり手クイズ🧪🏴‍☠🌸 ★2
- 【実況】博衣こよりのえちえちホロ分かり手クイズ🧪🏴‍☠🌸
- 【高市悲報】中国「国連安保理の許可なしに日本を攻撃可能だ」 [115996789]
- 【高市悲報】中国「国連安保理の許可なしに日本を攻撃可能だ」★2 [115996789]
- 日中戦争起きたら5日で自衛隊壊滅するらしい。じゃあ徴兵も無いし、俺等が必死になって反対してやる理由なくね? [237216734]
- 中国SNS「メディアがやたら日本が苦境だって報じてるけど本当?」→「嘘ですよ。ヤフコメを翻訳してみてください」 バレてしまうwwww [271912485]
