シェルスクリプト総合 その33

■ このスレッドは過去ログ倉庫に格納されています
2020/03/23(月) 01:12:30.31ID:TYte82vJ
シェルスクリプトに関する総合スレッドです。

全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。
・「○○(他の言語)でいいやん」は禁止。他のスレに行ってください。

シェルスクリプト総合 その32
https://mevius.5ch.net/test/read.cgi/tech/1571929725/
2020/08/05(水) 10:15:34.47ID:AdI/6NZo
>>698
EUCは2バイト文字の右半分がASCII文字になることはない

>>699
ぜんぜん違う
Windows NTは内部文字コードをUTF-16で処理している
カーネルとドライバは当然のことながら、Windows APIも
ANSIバージョンであってもUTF-16に変換して処理している

そりゃアプリは当然対応しなければいけないが
OSそのものは最初から多言語対応になっている

Linux/UnixはOS自体がC言語で作られ、内部文字コードは
1バイトのASCII文字互換であることを前提で作られてる
影響範囲が大きすぎる
2020/08/05(水) 10:16:23.73ID:AdI/6NZo
>>700
> そんな処理をしたユーザーが問題。

そんな処理がOSのあちこちに含まれてる
例えば起動時に実行するシェルスクリプトとかな
2020/08/05(水) 10:19:36.65ID:AdI/6NZo
>>700
> たとえば、英字の大文字小文字変換としてコード値に0x20を加減したら、ASCIIならうまくいくが、UTF-8 ならうまくいかない。
アホなの?

UTF-8であっても「英字の大文字小文字変換」で「ASCIIの英字大文字」を渡したらうまくいく
お前が言ってるのは「英字の大文字小文字変換」で「ASCIIの英字大文字以外(例えばASCIIの数字)」を
渡したらうまくいかないと言ってるのと同じことだぞ
2020/08/05(水) 10:26:28.53ID:RWwgydsE
まとめ。

>>673
ファイル名に日本語を使っても?

>>675
ええんちゃう?
シフトJISはツラそうだがかんばればなんとか?

>>676
「Linux/UnixはShiftJISをサポートできない」!!!

以降
「OS」の認識がゆるそうな>>676に対する指摘。

シフトJISなLinux環境はあまり現代的じゃないし、わりとどうでもいいはずなんだけど。w
2020/08/05(水) 10:27:55.11ID:RWwgydsE
>>703
アホなの?
シフトJISに置き換えたらそのままだろうがよ!
2020/08/05(水) 10:43:41.96ID:AdI/6NZo
>>705
だからお前が持ち出した「英字の大文字小文字変換」という例は
UTF-8でもSJISでも共に「英字の大文字」にしか対応しておらず
「英字の大文字以外」の動作は "未定義" のコードだろ
未定義なんだからうまくいかなくても想定通りの動作だ

俺が出した tr [a-z] [A-Z] というコードは
「英字の小文字を大文字に変換し"それ以外はそのまま"」というコードなんだよ
UTF-8の文字列を渡した場合は、正しく動くが
SJISの文字列を渡した場合は、正しく動かないんだよ

SJISのために余計な処理が必要になる
Linux/UnixでSJISに対応しようとしたら
このような余計な処理がたくさん必要になるという話をしてる
2020/08/05(水) 10:46:33.42ID:AdI/6NZo
>>705
言い返したかったら

英字の大文字小文字変換としてコード値に0x20を加減するコード
かつ、それ以外の文字は変換しないコードにしてみ?

そしたらそれは、UTF-8なら正しく動作し、
SJISだと漢字を壊すコードになるから
(SJISのための処理を追加しない限り)
2020/08/05(水) 11:07:15.58ID:RWwgydsE
>>706
話が通じてないな。
そのへんは、UNIX/Linuxの問題ではない。

もう相手にしない。
2020/08/05(水) 11:10:30.69ID:OjEDy2ZO
>>699 >>701
XPが出始めの頃、エクスプローラでShift-JISのダメ文字が問題となって、
それに対応するパッチもあったと記憶している。
2020/08/05(水) 11:18:48.18ID:cfMvwLfN
>>706
言い返したかったら
英字の大文字小文字変換としてコード値に0x20を加減するコード
かつ、それ以外の文字は変換しないコードにしてみ?

これすらできないもんなお前はw

>>709
俺は記憶していない
もしそんなのがあればWindows 2000でも問題になってるはずだが?
2020/08/05(水) 11:19:10.36ID:cfMvwLfN
>>706じゃなくて>>708あて
2020/08/05(水) 12:38:59.89ID:Mw508nfj
>>709
そうそう。
それが修正されたことが「OSとしてのShift-JIS対応」だと言うんなら,
Linuxでも「OSとしてのShift-JIS対応」はされてる。
C言語であろうが何であろうが,ダメ文字に対処することは可能だからね。
2020/08/05(水) 12:42:59.18ID:guh8E5Hj
>>712
OSに関する点すべてを修正することが「OSとしてのSJIS対応」

局所的に一箇所だけ修正して、それ以外は修正されてないなら
それは「OSとしてのSJIS対応」ではない

完全対応かどうかって話をしてる
2020/08/05(水) 12:50:09.73ID:Mw508nfj
なんかもうあほらしくて議論する気がなくなってきたけど
WindowsのShift-JIS対応が「完全」なら,
どうしてWindows上でダメ文字対応する必要が(今だに)あるんですかね?

あ、「それはWindows上のwin32 APIで用意されているShift-JIS対応の機能を使ってないからだ!」
っていう反論はなしね。
それってあなたが「LinuxはOSとしてはヾhift-JIS対応していない」ことの理由に挙げている
「Linux上のglibcやlibiconvで用意されているShift-JIS対応の機能を使えば」っていう文脈と同じだもの。
2020/08/05(水) 12:53:10.21ID:lrr9/7h8
そろそろOSのスレに行ったら?
シェルスクリプト関連からなんてOSの内部なんて知らん、せいぜいAPIがOSな感じ
WindowsだってShift-JISとUnicodeとふた系統のAPIが用意され、Shift-JISのAPIを使ってたら=使われていた使われている同じ=シェルスクリプトのスレで違いを論じあってるのがおかしい
2020/08/05(水) 12:55:28.80ID:lrr9/7h8
>>714
アプリケーションコードレベルでなんかやってたらかな。まあやるだろうけど
OSの内部でUnicodeだからアプリケーションもUnicodeでというのは、まあやらんな、Shift-JIS APIを使ってるようなのは
シェルスクリプトで使うコマンドやシェルも同じことだな
2020/08/05(水) 12:57:27.49ID:guh8E5Hj
>>714
> どうしてWindows上でダメ文字対応する必要が(今だに)あるんですかね?

自分で「Windows上」って言ってるから、お前
OSの対応とOS上の対応は違うってわかっててわざと言ってるんだろ?

そいうあからさまな釣りにレスする価値ないね
でなおしてきな
2020/08/05(水) 13:04:26.79ID:lrr9/7h8
Shift-JISなんてLinuxなどでも今頃使わない廃れたコードに拘ってるのがおかしい
未だになんか(ちょっと)拘ってるOSがあるようだけど
どうせなら、Unicode(UTF-8)でのLinuxなどの問題を言えよw Shift-JISなんて誰も使わないのを論じるより益があるだろう、発端のも別にShift-JISと言っているわけではないようだし
2020/08/05(水) 13:16:42.98ID:guh8E5Hj
>>718
今はOSが対応してるかの話をしてるだけ

Windowsは内部コードがUTF-16でSJIS等はUTF-16に変換して処理される
WindowsのAPIのうち、ANSI対応のAPIがSJIS等に対応しているAPIで
このAPIの存在がまさにWindowsがSJIS等の対応しているという証明になってる
そしてOSに付属しているコマンドもしっかりSJIS等に対応してある

しかしLinux/UnixにはそういうったAPI(システムコール)が存在しない
だからOSではない部分で独自に対応しないといけない上に、
付属のコマンドは多くががSJISに対応していない
2020/08/05(水) 13:27:21.34ID:lrr9/7h8
>>719
Windows APIを使ったのを書いたことがないとしか思えない
Windows API には Shift-JISバージョンとUnicodeバージョンがある、Shift-JISバージョンを使っていたら内部でどうであれ同じ問題は起こり得る

同じように、Shift-JISに対応したLinuxなどではAPIで問題が起こることはないだろう、ロケールでShift-JIS設定できて問題ないんだろう実際に
何を論じてる、その違いでどう問題が起こると言っているのかさっぱりだな。てか、そんな問題は今時起こらない(UTF-8にしてるのが当たり前な)のでそんなの言っても意味ねえとしか思えんけど
2020/08/05(水) 13:32:00.64ID:guh8E5Hj
> Windows API には Shift-JISバージョンとUnicodeバージョンがある、

Shift-JISバージョンなどというものはない。
あるのはANSIバージョンだ。

そういう基本から、お前は理解していない。
2020/08/05(水) 13:32:21.13ID:guh8E5Hj
> 同じように、Shift-JISに対応したLinuxなどでは
存在しない
2020/08/05(水) 13:34:49.46ID:guh8E5Hj
Shift-JIS 対応 Linux でぐぐればでてくるだろ?

Linux の Shift JIS サポート
http://www.ossforum.jp/jossfiles/Linux_SJIS_Support.pdf

> なぜ Linux で Shift JIS ロケールがサポートされない

> 現在、日本で利用されている多くの Linux ディストリビューションでも、Unicode 系の UTF-8 がデ
> フォルトとされ、Shift JIS ロケールが用意されているケースでも、利用は推奨されていない。ちなみ
> に、ユーザーのロケール設定は、Linux ターミナル画面で locale コマンドを打てば LANG=
> ja_JP.UTF8 のように表示されるので確認できる。
> Shift JIS 系ロケール(sjis、cp932、ibm943 など、Appendix 1 参照)は、次のような理由のために推
> 奨されていない;

> 1. Linuxの文字処理ライブラリ関数は、Unicode を扱うことを基本としているため、本ライブラリ
> 関数を使ってインプリメントされた Linux システムコマンドでは、ファイルデータの中の文字
> 処理や、ファイル名の処理で、Unicode は正しく扱えても、Shift JIS は扱えないことがある。

> 2. Shift JIS データの処理は、「特別」な扱いとなり、メールクライアント Thunderbird など、個々
> のミドルウェアに多大な開発負担を負わせている。

> 3. 特に、正統 Shift JIS ロケール sjis では、 0x5C=U+00A5 というマッピングのために、オープ
> ン系プログラム(C言語、Java など)の動作が保証されない。cp932 などでは問題ない。
2020/08/05(水) 13:37:54.50ID:lrr9/7h8
>>721
そのANSIとやらの内部でShift-JISに対応してんだがな=Shift-JISバージョン
純粋にANSIとUnicodeしかなかったら、Shift-JISを受け入れるAPIはなんなんだかな
マジでちょっとWebでちょっと見ての知ったかかよ

>>722
それが対応してんだな、対応してなかったら使えない漢字があることになるだろうに
だったらShift-JISなんてロケールできねえわな

マジ知ったかすぎ
2020/08/05(水) 13:42:18.61ID:guh8E5Hj
> そのANSIとやらの内部でShift-JISに対応してんだがな=Shift-JISバージョン

だから最初から俺が、SJISはWindows NTの内部文字コードであるUTF-16に変換しているから
WindowsはSJISに対応してると言ってるだろ。APIはOSの機能だ。

> だったらShift-JISなんてロケールできねえわな
今LinuxでSJISロケールに対応しているものは現存しない
あったら教えてくれや

昔、実験的に作られて実用的じゃなかったから
今LinuxでSJISロケールが存在ししてない。証拠の一つ。

Windowsが今も標準でSJISに対応してるのとは対象的だな
2020/08/05(水) 13:52:00.11ID:guh8E5Hj
ん?もしかしてこいつ。ANSIバージョンのAPIで
もしSJISだったら特殊な処理を行う。みたいな行き当たりばったりな
コードが入ってると思ってんじゃねーか?w

ANSIバージョンのAPIは単純に現在のコードページ(SJIS等)から
UTF-16に変換(またははその逆)をしてるだけなんだが

Windows NTは内部的には全部UTF-16で処理してるのだからSJIS特有の処理は行っていない
OSの機能としてANSIバージョンは文字コードの変換機能が行われてるだけ
繰り返すが。OSの機能として。これがOSの機能。
2020/08/05(水) 13:54:00.12ID:lrr9/7h8
何その最初のごまかしは。お前は、
>Shift-JISバージョンなどというものはない。
>あるのはANSIバージョンだ。
と言っているんだけど?ただの厳密な(?)名称のをか?残念ながら日本ではShift-JISを使うのが当たり前で、ある意味後でUnicodeがなので、歴然とShift-JISバージョンのAPIという認識されてる
書いたことないなら知らんだろうけど

>昔、実験的に作られて実用的じゃなかったから
>今LinuxでSJISロケールが存在ししてない。証拠の一つ。
何それww存在してないわけではなくデフォで入ってないとかじゃないの?てか、やっぱり何それ
だったら「全く」Shift-JISに拘る根拠は皆無だな
2020/08/05(水) 13:56:15.83ID:guh8E5Hj
>>727
お前が認識してるだけだろw

世界中でANSIバージョンはSJISバージョンのAPIだと思ってるわけがないだろ
ほんと世界が狭いなw

> 何それww存在してないわけではなくデフォで入ってないとかじゃないの?てか、やっぱり何それ
だから追加できるなら、その追加方法をいえって。
削除されて追加できんねーんだよ

俺の言葉の揚げ足を取るんじゃなくて
お前が証拠を突きつければいいだけ
できないんだよなw
2020/08/05(水) 13:56:44.04ID:lrr9/7h8
>>726
Shift-JIS バージョンの API と Unicode バージョンの API ふた系統あると「俺は」「最初から」言っているんだがな
お前が Shift-JISバージョンなんてない ANSIがあるだけだ と言い出したんだろうが
何その妄想。酷すぎw そんなこと考えるとしたらお前の方だろうがw
無知を色々晒して偉そうにのたまうからそんなわけわからんこと言い出すんだよ
2020/08/05(水) 13:57:02.63ID:guh8E5Hj
> 削除されて追加できんねーんだよ

削除されてというか一部で実験的に作られた程度で
本流にマージされたことはない
訂正な
2020/08/05(水) 13:57:59.41ID:lrr9/7h8
>>728
何それww
残念だったな

ググればすぐあるけど?頑張れよ
2020/08/05(水) 13:58:02.44ID:guh8E5Hj
>>729
> Shift-JIS バージョンの API と Unicode バージョンの API ふた系統あると「俺は」「最初から」言っているんだがな

SJISバージョンのAPIというものはない。
なんど言えば理解するんだ?

そしてANSIバージョン+SJISのコードページに対応して
Windowsが出荷されてるんだから。
ほれみろ。WindowsはSJISに対応してるじゃねーか
2020/08/05(水) 13:58:49.12ID:guh8E5Hj
> ググればすぐあるけど?頑張れよ

それ自分で見つけられなかったときの言い訳じゃんw
相手に探させようとするww
2020/08/05(水) 13:59:08.02ID:lrr9/7h8
そこの拘るだけしかないんだな。意味ないな、ガンバレ
2020/08/05(水) 14:00:12.88ID:guh8E5Hj
今SJISの話をしてるのだからSJISに拘るのは当たり前
2020/08/05(水) 14:04:15.76ID:lrr9/7h8
>>733
いや、ググったらすぐにあったけど?
俺はShift-JISなんて今時使わないだからな、Shift-JISなんて無くてもいいんだから
なんで 意味なく無知なのに偉そうな お前に 親切に 教えてあげなきゃならないのよ

>>735
いや、そこじゃないんだけどw

てか、またそれだとイミフだぞ?お前はLinuxでロケールでShift-JISなんてできないってんだろ?だったら拘る理由がゼロだろうに
論理破綻してるぞ?まあ頑張れ。イミフすぎてもうわけわからんが頑張れ
2020/08/05(水) 14:05:53.97ID:L2ar51Hq
> いや、ググったらすぐにあったけど?
じゃあググったキーワードを書いて

見つけたサイトじゃなくていいよ
キーワードだけでいい
それぐらいできるでしょ?
検索したキーワードなんだから
2020/08/05(水) 14:06:46.88ID:L2ar51Hq
LinuxでロケールでShift-JISなんてできないということに拘るだけですが?
ゼロって何の話ですか?
2020/08/05(水) 14:08:17.67ID:L2ar51Hq
Windowsは出荷状態でSJISに対応しているが
LinuxはShift-JISなんてできない
→そうですね

で終わる話だと思いますがね?
なんでそれでだめなんですか?

拘るというのは、そうですねで終われない人の方でしょう
2020/08/05(水) 14:39:14.54ID:m77ShW/O
全く面倒臭いな
・linuxカーネルはバイト列で扱うから\0と/さえ区別できれば良く文字コードの概念は基本的にない
・SJISは\0と/の条件を満たすから使える
・GNU/Linuxのユーザーランドにはglibcのlocaleサポートがあり
>683に書いてある通り
# localedef -f SHIFT_JIS -i ja_JP ja_JP.SJIS
$ export LANG=ja_JP.sjis
でSJISも使える
これだけのこと
2020/08/05(水) 14:42:30.95ID:RWwgydsE
WindowsにはA系APIがあるからセーフという理屈なら、UNIX/Linuxではiconvでもnkfでもあるんだからセーフ。w

A系APIが対応してるのは、ANSIではなく、OEM文字コードなんだけどな。
2020/08/05(水) 15:30:03.21ID:L2ar51Hq
・linuxカーネルは〜
・カーネルとOSは別である


論破w
2020/08/05(水) 15:30:32.77ID:L2ar51Hq
>>741
多くのアプリがiconvやnkfを使ってない
2020/08/05(水) 15:32:34.75ID:Mw508nfj
>>741
これ。
2020/08/05(水) 15:34:02.34ID:Mw508nfj
>>743
アプリじゃなくてOSの話だそうです。>>717
2020/08/05(水) 16:06:44.71ID:RWwgydsE
>>743
知らんがな。
未対応なものがあったとしても、カーネルにもOSにも関係ない。
2020/08/05(水) 16:21:27.81ID:L2ar51Hq
カーネルやOSで"対応していない"から
ソフト側で対応するしかなくなって
結果対応してるソフトが大幅に減ってる
2020/08/05(水) 16:33:14.08ID:RWwgydsE
>>747
カーネルやOSは、文字コードを限定していない。
アプリはアプリなので、まったく別の話。
2020/08/05(水) 19:47:59.44ID:L2ar51Hq
>>748
Linuxはそうだね。だからLinuxはSJIS等に対応していない。
WindowsはOSがAPIを提供している。
2020/08/05(水) 19:57:21.12ID:Mw508nfj
>>749
glibc
2020/08/05(水) 20:01:03.00ID:L2ar51Hq
glibcはC言語用ライブラリに過ぎない
2020/08/05(水) 20:02:17.75ID:M377peH6
ここ一生文字コードの話してんな…
2020/08/05(水) 20:29:25.50ID:RWwgydsE
>>749
抽象度の高い数学は、現実の物理の計算に対応してないってことだな。w
また、Windowsの多くのAPIは、DLLで提供されてるただの関数でしかない。

まあ、もうええ。
2020/08/05(水) 20:30:18.97ID:RWwgydsE
>>752
文字コードの話は鬼門だからね。。。
2020/08/05(水) 20:32:14.77ID:xVHqlCRp
キチガイは無意味なことに異常に拘るからな
2020/08/05(水) 20:39:40.85ID:L2ar51Hq
>>753
> また、Windowsの多くのAPIは、DLLで提供されてるただの関数でしかない。

それをいうなら、
Windowsの多くのAPIは、OSで提供されてるただの関数でしかない。
だろ?

今はOSが対応しているかどうかの話をしてるんだから
2020/08/05(水) 21:05:44.83ID:Mw508nfj
もうなんでもありやな。
Windowsってスゲー!w
2020/08/05(水) 21:07:02.99ID:Mw508nfj
いやある意味マジで凄い,とも言えるな。
Linuxだと集客力がなさすぎて,ある程度論理的思考ができる人間しか寄せ付けないけれど,
Windowsには(謎の)集客性があるから,[検閲されました]。
2020/08/05(水) 21:12:27.34ID:L2ar51Hq
> [検閲されました]。

これ面白いと思って書いてんの?
2020/08/05(水) 21:30:49.87ID:xVHqlCRp
>>758
>>683,685,686
で、終わってる話だな。都合が悪くなったら訂正できずに話を逸らして持論を喚いてるだけの
論理的なんてあるわけがない。異常な執着さだけだな
2020/08/05(水) 22:59:53.29ID:ilbg2XF8
日本語の設定表記ってjaなのかJPなのか分からなくなるわ
2020/08/05(水) 23:11:03.71ID:Mw508nfj
>>761
「日本語」がja
「日本国」がJP
2020/08/06(木) 00:08:14.61ID:pS9zPYMv
ja_JP
en_US

この2つが頭に入ったらどっちがどっちか迷うことはなくなったな。
「US」が絶対に「国」だから。w
764デフォルトの名無しさん
垢版 |
2020/08/06(木) 04:06:10.65ID:cHZDAcP7
>>685
んなもんシェルがlocale対応してないだけの問題じゃん。
2020/08/06(木) 06:19:58.08ID:hlsSANZk
ではシェルがlocaleに対応していたらSJIS対応になるのだろうか?
もちろん違う。なぜならlocaleがSJISに対応してないからだ
2020/08/06(木) 08:08:10.25ID:v5q+3Q4z
結局最初の質問に対する答えとしては,
いまどきのマトモなOSは,
端末上の文字表示に既定でUTF-8を採用していて,
その場合はコマンド名に非ASCII文字を用いても問題は生じない。
でいいのかな?
2020/08/06(木) 08:15:03.38ID:hlsSANZk
>>766
「端末上の文字表示に既定でUTF-8を採用しているものを
まともなOSという定義にしたい」というお前の願望やろ?w
2020/08/06(木) 09:06:38.59ID:hTdGagRd
× localeがSJISに対応してないから
○ シェルのlocale対応が中途半端だから
2020/08/06(木) 09:09:57.95ID:mDao40Cq
>>766
そう考えて差し支えないし、大抵はロケール対応してるから他の文字コードでも同様に非ASCII利用可(SJISも可)
2020/08/06(木) 10:08:45.34ID:9YoRhsMg
そういえば、昔のCygwin、output-metaがoffだったな
2020/08/06(木) 11:58:34.79ID:RYGFOdbJ
シェルはOSの一部。WindowsのシェルもOSの一部
2020/08/06(木) 12:36:15.57ID:v5q+3Q4z
荒しは黙ってNG
2020/08/06(木) 13:00:47.50ID:Dywe59yG
メガネは身体の一部。
2020/08/06(木) 13:07:28.07ID:RYGFOdbJ
>>773
体を手に入れたらメガネが付いてるわけじゃないからなぁw
2020/08/06(木) 13:31:59.57ID:9YoRhsMg
メガネは顔の一部です♪
2020/08/06(木) 16:26:05.72ID:v5q+3Q4z
メガネは顔の一部じゃない あなたは私のすべてじゃない
2020/08/10(月) 16:59:38.66ID:BcFTAJq0
zshって:コマンドが遅いと思ったら、:という名前の関数を定義できるから
何もしないコマンドではなく関数呼び出しのようになってるんだろうな
めんどくさいね
778デフォルトの名無しさん
垢版 |
2020/08/10(月) 17:59:39.62ID:IQ3fIsH1
絵文字→数値文字参照に変換したいんだけどシェルだけじゃ無理?
たとえば「😀」であったら「&# 128512;」みたいな
nkfで数値文字参照→絵文字の逆パターンはできるっぽいけど
2020/08/10(月) 18:12:59.63ID:jBTjAApo
printf '&#%d;' \'
2020/08/10(月) 18:18:15.92ID:BcFTAJq0
>778
できるよ

#!/bin/bash
unk="??" # ← うんこの絵文字
printf '%x' "'$unk" # 1f4a9

ただしbashのようにUnicode対応してるシェルじゃないと駄目
dashのように対応してないシェルだと1バイトずつの処理になるからから
UTF-8 → コードポイントへの変換処理を自前でやる必要がある

あと文字ではなく文字列の場合は1文字ずつループする必要があるね
これもbashだったら簡単だけど、dashとかだと苦労する。
dash等の場合パフォーマンスの点からodコマンドで
8進数化して処理したほうが速いかもしれない
どちらにしろまあ手間がかかる
2020/08/10(月) 18:25:22.89ID:HYtJuMAc
こんにちは

PowerShellだと自作のhoge.ps1ファイルを実行すれば
hoge.ps1に定義していた関数が使えるようになりますが

Macで同じように自作のpiyo.shに書いて,ターミナルから実行して,
piyo.shに定義していた関数をその後も有効にすることはできないでしょうか

PowerShellと同じ感覚でtest.shに

#!/bin/bash
function hello(){
echo "Hello, World!
}

と書いて実行したら,ターミナル上でその後も関数helloが有効になると思っていたのですが・・・
初心者(今日からはじめました)のでなにもわかってないと思いますが
782デフォルトの名無しさん
垢版 |
2020/08/10(月) 18:27:22.34ID:IQ3fIsH1
>>779
>>780
おお、できた!
printfで完結するんだね
メインのシェルはbashだから大丈夫
ありがとう!
2020/08/10(月) 18:31:59.86ID:BcFTAJq0
>>781
source(または . コマンド)で読み込む

シェルスクリプトを「実行」した場合は
新たにプロセスが作られて実行される。

今使ってるシェルでつかえるようにするには
現在のシェルに読み込まなくてはいけない
それがsourceコマンド

でもまあ個人的には外部シェルスクリプトにするほうが
便利な気もするけどな
2020/08/10(月) 18:36:45.96ID:HYtJuMAc
ありがとうございました!
2020/08/10(月) 18:36:55.03ID:BcFTAJq0
printf '%x' "'$unk" # 1f4a9

ところでこの シングルクォート を頭につけるって
仕様どこのバカが考えたんだろうな?
このせいで最初の一文字しか変換できず
文字列を文字コードにすることができなくなってる

フォーマット書式を拡張して、例えばこんなふうにしていれば
文字列を全体を変換するとかできただろうに。今からでも遅くはないが
printf '%@x' "$unk"
2020/08/10(月) 18:49:27.63ID:BcFTAJq0
ちゃんとテストしてないけど、文字列全部をコードポイントにする方法

while [ "$str" ]; do
 printf '%x ' "'$str"
 str=${str#?} # 頭一文字を削除
done

多分動くと思うけどprintfを文字の数だけ実行しないといけないのがダサい(遅い)
bashだったら、頭から文字を削らなくても ${str:N:1} でできるはず
どちらにしろprintfの実行回数は減らせないが

ここから絵文字のみをコードポイントにするには
コードポイントの判定が必要になるので・・・
codepoint=$(printf '%x' "'$str")
これはサブシェル使ってるから更に遅くなる(ため息)
パイプ使って処理するのがまだましかねぇ

while [ "$str" ]; do
 printf '%x\n' "'$str"
 str=${str#?} # 頭一文字を削除
done | while IFS= read -r codepoint; do
 # そのまま出力するか、実体参照で出力するか判定して切り分ける
done

めんどくせーなw
2020/08/10(月) 19:09:20.89ID:t4rZM551
だったらPerlを使えば。
2020/08/10(月) 19:10:29.77ID:BcFTAJq0
>>787
そのネタは飽きた
2020/08/10(月) 20:01:35.10ID:jBTjAApo
いつものRubyおじさんは盆休みか
2020/08/10(月) 21:47:25.96ID:H4x6U7o8
そういう場合はバラすコマンドを書くんだよ
printfなんて引数が書式から溢れたら繰り返すという独特の仕様なんだし
2020/08/10(月) 22:04:46.97ID:wrD0HyDw
>>790
そうすると今度は引数が多すぎますってなるんだよな
また全てを実体参照にしないなら、書式も動的に組み立てる必要がある
一体どのアルゴリズムが一番速いのか?
なかなかうまく行かないもんだよね
2020/08/10(月) 23:58:47.58ID:t4rZM551
>>791
行にばらしてから、xargsでまとめればなんとか?

なお、速さを心配するならPerlで!
2020/08/11(火) 06:27:29.80ID:imudTDmO
👨‍👨‍👧‍👧
2020/08/11(火) 14:02:41.21ID:oiMKju9F
>>782
一応純POSIXでもできる。
https://gist.github.com/cmplstofB/0b0ce2bf052b3bb64d091fc83504fc32#file-u8dec-sh
2020/08/11(火) 15:00:36.80ID:6EF+liXG
>>794
シェルつーか、sedやな。w
2020/08/11(火) 17:50:39.44ID:K2Zt4r5r
printfもシェルつーかprintfコマンドやな。という言い方もできる
ほとんどはprintfはビルトインコマンドだからシェルの一部と言えるが
なんとmkshではビルトインではないのだ
だからprintfを多用するとmkshでは遅くなる
2020/08/11(火) 18:15:17.47ID:lw0B26+i
速度速度言うなら...w
まあ、マジでそう思わないこともない
2020/08/11(火) 18:20:09.85ID:K2Zt4r5r
言語(ツール)を選ぶ理由は速度が第一じゃないからね

なにか理由があって言語(ツール)を選ぶ
その上で(極端に)遅くなる場合ってのは
知っておいたほうがいい

無知で極端に遅くしておいて、自分が悪いのに
言語(ツール)のせいにするのは愚か者
2020/08/11(火) 22:40:08.94ID:wY/KrlTt
一人で妄想して馬鹿にしてる感じ、誰のことを言っているのだが
2020/08/11(火) 22:47:03.84ID:ZSHW8utc
誰も聞いてないことをで自己満してる
承認欲求が激しいんだろうな
2020/08/12(水) 00:31:12.05ID:EZbfglBp
外部コマンドをビルトイン化できるらしいがどんな用途で使うんだ
日頃使ってるechoは速度重視だからシェルに内蔵してるってのは分かるが
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況