[過去ログ] シェルスクリプト総合 その31 (1002レス)
前次1-
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
107: デフォルトの名無しさん [sage] 2019/08/12(月) 15:40:50.17 ID:FEiQT6YL(1/5) AAS
>>104
104(1): デフォルトの名無しさん [sage] 2019/08/12(月) 11:48:18.69 ID:7x51tVmW(1/3) AAS
bash 依存だけどこんな関数を作って使ってた事もあった

function _join {
local IFS="$1"; shift; echo "$*"
}

bash$ _join , {1..10}
1,2,3,4,5,6,7,8,9,10
それをbash依存にしないのは簡単だよ
localの代わりにサブシェルを使えばいい

_join {
(IFS=$1; shift; echo "$*")
}

ちなみにlocalはPOSIX準拠じゃないけど、
local もしくは localと同等のことができるtypeset のどちらかが
POSIX準拠シェルのすべてに(おそらく)搭載されてるから
2パターン作ることになるが、サブシェルを使わずに作ることも可能

面倒だからOLDIFSに対比させるのが楽だけどねw
109: デフォルトの名無しさん [sage] 2019/08/12(月) 16:15:47.05 ID:FEiQT6YL(2/5) AAS
>>108
108(1): デフォルトの名無しさん [sage] 2019/08/12(月) 16:10:50.92 ID:7x51tVmW(2/3) AAS
_join () (IFS=$1; shift; echo "$*")

でいいんじゃね
その書式、使えないシェルがあるんだよ。
111: デフォルトの名無しさん [sage] 2019/08/12(月) 16:20:03.86 ID:FEiQT6YL(3/5) AAS
あ、でも今調べたら相当古いbashだけみたい。ならいいか
113: デフォルトの名無しさん [sage] 2019/08/12(月) 16:37:37.51 ID:FEiQT6YL(4/5) AAS
>>110
110(1): デフォルトの名無しさん [sage] 2019/08/12(月) 16:18:53.19 ID:7x51tVmW(3/3) AAS
IFSを使う場合はデリミタに1文字しか使えないので
その後はこんな↓ふうに書き直した(けど最近は全く使うことがない)

function _join {
local d="$1"; shift; printf '%s' "$1"; shift;
printf '%s' "${@/#/$d}"; echo;
}

$ _join '->' {{1..4},5,{4..1..-1}}
1->2->3->4->5->4->3->2->1
それをbash依存なくするにはループだろうな
たぶん誰でもわかると思うのでコードは省略w
local変数使わなくても行けるかも

>>112
112(2): デフォルトの名無しさん [sage] 2019/08/12(月) 16:20:31.00 ID:VzSWusfF(1) AAS
shellcheck のような書き方を指導する奴で
POSIX準拠の書き方でないところをチェックするツールでもあるのか?

滅茶苦茶詳しすぎる
shellcheck 以外だと使ったことがないけど shfmt
・・・でチェックできるのか知らない。使い方がよくわからないw

shfmtという名前を忘れたのでぐぐったら bash依存チェックするツールがあったよw
外部リンク:sourceforge.net
外部リンク:github.com

俺はもうだいたい覚えたね。POSIX準拠の書き方を調べたと言うよりも
とあるシェルで動かない。なんでや?POSIX準拠じゃないんかい。の繰り返しで。
だからPOSIX準拠だけど、シェルのバグで動かないっていうのも頭に入ってる。
114: デフォルトの名無しさん [sage] 2019/08/12(月) 16:53:21.75 ID:FEiQT6YL(5/5) AAS
あ、たぶん>>112の疑問に答えてないw

なんで古いbashで動かないのかがわかったかと言うと
古いバージョンのシェルをビルドしたテスト環境を用意していて
単に実行して確認しただけの話。
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.214s*