SSブログ
前の10件 | -

Macでバックスラッシュでハマった話 [ソフトウェア/PC関係]

会社で支給されていたThinkPadが,昨年原因不明の不調で起動しなくなり,代替として使えるPCが手元にMacBook Airしかなかったために,仕方なく業務でMacを使うようになった。最近古いPC入れ替えのお知らせが来て,本来ThinkPadでもMacでも選べるはずなのだが,何故かThinkPadの在庫がないと言われて,MacBook Airが業務に使うには非力だったのも事実なので,背に腹は変えられずM1のMacBook Proに入れ替えた。これでもう当分Windows環境には戻れそうにない。

私物としても古いMacBookを持って入るので,まるきり初心者ではないものの,いろいろMacでやり方がわからないことがあると,追求して調べずにWindowsマシンでやってしまったりしていたために,わからないことはわからないままになってしまっていた。しかし業務に私物のPCを使うわけには行かないので,MacBook Proでやっていく上は,なんでもMacでできないと都合が悪い。というわけで現在も試行錯誤しながらやっている訳である。

まず最初に驚いたのは知らないうちに,MacOSのターミナルのデフォルトのシェルがzshになっていたことである。Linuxでもbashしか馴染みがなかったのでzshは全く知らないが,基本的なところは互換性があるだろうから余り気にしない。ただ流石に新しいだけあっていろいろ便利な機能があるらしい(あまり良く把握していない)が,追加の便利モジュールがあるのでいくつか入れてみた。oh-my-zshが便利だとあちこちに書いてあったので入れてみたが,何がどう変わったのかはよく分かっていない。認識しているのは,デフォルトでaliasが色々設定されていたり,各種コマンドライン補完のためのファイルがパッケージされているらしいこと,gitを使うのに便利なプロンプトになるというところだろうか。ただoh-my-zshと一緒に入れたpecoというツールがとても便利である。pecoは別にzsh専用ではないのだが,zshを活用しようと思わなければ存在に気が付かなかった可能性があるのでzshのお蔭といったところになるだろう。Pecoはフィルタコマンドで,標準入力で文字列のリストを渡してやると,CUIでリストの中からいずれかを選択することを可能にする。例えば,カレント・ディレクトリのファイルのリストを渡すとpecoがファイルを一覧表示してくれてカーソルキーを使って目当てのファイルを選択してリターンキーを押すと,選ばれたファイル名がpecoの出力として得られるのである。長いファイル名をすべてキー入力するのに比べると圧倒的に楽になる。私の場合は右手しか使えない状態なので尚更便利である。フィルター機能が秀逸なのだが,その辺,気になった人は色々紹介しているサイトがあるのでググってみていただきたい。

.zshrcでpecoを起動するキーを設定しておくと,コマンドで入力中にファイル名が必要なところでpecoにファイル名のリストを食わせて起動することで操作を楽にすることができる。しかしこれを使って気づいたのだが,lsコマンドやfdコマンドなどでファイルリストを作ってpecoに食わせた場合コマンドラインに戻ってくるのはファイル名に含まれる空白や特殊文字もそのままになってしまうということである。いちばん簡単な解決法はファイル名をそれぞれダブルクォートで囲んでしまうということ。そこで.zshrcを編集して,ダブルクォートを追加するようにしてみた。ここで注意が必要なのは,ダブルクォートがシェルスクリプト中では特別扱いが必要な文字ということである。そのため普通の文字として扱うためにはバックスラッシュでエスケープする必要がある。そんなことはプログラマとしては至極当たり前のことなのでやっているのだが,実際実行してみるとなんかおかしい。ダブルクォートが表示されるべきところに円記号が表示されており,ダブルクォートそのものは表示されていない。なぜだろう。ここでひとしきり悩むわけである。これはしかし後から考えると永年Windowsの世界で生きてきた人間には気づかなくても仕方ないことだったと言えるだろう。私は暫くウンウン唸っていてふと閃いたわけである。それは,MacOSでは「バックスラッシュ」と「円記号」が別物なのではないかということ。

「バックスラッシュ」という記号はそもそもASCIIのエンコーディングでは,0x5cというコードポイントに割り当てられている。一方日本で使われる「円記号」はASCIIでは定義されていない。そりゃそうだ。で,日本のJIS(X201)では1バイトの文字エンコーディングが規定されているのだが,ここではコードポイント0x5cに「円記号」が割り当てられている。そして逆に「バックスラッシュ」は定義されていない。つまりASCIIとJISとでは「バックスラッシュ」と「円記号」が完全に交換されている事になっているのである。その結果として一般的なコンピュータの世界では,コードポイント0x5cの文字は,環境にインストールされているフォントによって「バックスラッシュ」と表示されたり「円記号」と表示されたりするが,文字データとしては同一のものとして扱われてきたのである。ところがいつのMacOSからそうなのかは知らないが,MacOSでは「バックスラッシュ」と「円記号」が同時に存在しうる状況なのである。それこそMacOSらしいと言えるのかもしれないが目に見えているものがまさにそのものなのである。確かに今やUnicodeがOSの標準のエンコーディングとして採用される時代にあって,過去の遺物のようなASCIIコードの事情を引きずり続ける必要はないのかもしれない。しかしプログラミング言語としては,Unicode(UTF-8)のソース・コードをサポートする処理系が一般的になっているとはいえいまだにASCIIエンコーディングのソース・コードも有効な場合がほとんどである。(普通の文字だけを使っていればUTF-8エンコーディングで書かれたファイルはASCIIエンコーディングとしても読めるという事情はあるが)

話を戻すと,Windowsの世界で生きてきたプログラマにとっては「バックスラッシュ」=「円記号」であり,脳内で自動的に相互変換されてしまうのである。ところが今のMacOSではそれが通用しない。エディタに「円記号」が表示されていればそれは純然たる円記号であって,決してバックスラッシュではないのである。それで私が編集した.zshrcでは,私が円記号を入力したので円記号が表示されているだけで,結果としてエスケープされなかったダブルクォートは文字列リテラルを囲む特殊記号として機能していたので表示されなかったというわけである。MacOSでバックスラッシュを入力する方法は[option]+「円記号」だそうだ。プログラミングのときにこれではあまりに面倒だろうから,「円記号」単独でバックスラッシュを入力する設定も可能だそうだ。いずれにしても何か特殊な設定をしていない限り,バックスラッシュが必要なところには目で見て正しくバックスラッシュが表示されていなければならない,ということである。


nice!(0)  コメント(0) 

本日のつぶやき: まとめ 2023/04/21

  • デトロイト美術館が2013年のデトロイト市財政破綻の際に所蔵作品の売却が検討されたものの,市民らの協力に...『デトロイト美術館の奇跡(新潮文庫)』原田マハ ☆3 https://t.co/5xF4aIntZ8 #booklog 04/20 15:38
  • #宇宙団 のVo&Gtの望月志保さんの弾き語りat 下北沢げによい、完全生音でめちゃくちゃ良かった。望月さんの生声素晴らしいな。脱ダイエット宣言とおばかちゃん、可愛かった。宇宙団の「いつかは」のソロバージョンも味わい深かった。見せてない聴けなかったからまた弾き語り行かなきゃ 04/20 22:10
  • 初めましてのモテギスミスさんもとても印象的な歌詞の曲で楽しかった。「いぬいも」ってタイトルの曲で、おいものおやつを食べないで人に見えないところに隠してるうちの犬を思い出した。買って来たCDには入ってなかったか。 https://t.co/mU1QWLG1bz 04/20 23:29

nice!(0)  コメント(0) 

本日のつぶやき: まとめ 2023/04/20

  • 【読了】『デトロイト美術館の奇跡(新潮文庫)』原田マハ https://t.co/850BYjcq0z #booklog 04/19 09:47
  • 明日の望月志保さんのライブに備えてソロ音源を復習。「ご愛嬌」に入ってる「見せてない」が可愛すぎる😊 04/19 22:54
  • なんと〜。ちげちゃん抜けちゃうのか。今後はどういう活動になるのかな。どういう形であれギターを弾く姿を見続けられるなら良いのだけど。 https://t.co/N4JHlqd4oB 04/19 23:07
  • なんと、大変なことに...。健康の問題はいつでも突然思いがけない方向からやってくるよね。私も数年前に死にかけたし。副作用なども大変だと思うけど、前を向いて治療に臨んでほしいな。 https://t.co/hpk73YaKI8 04/19 23:15
  • 今更だけど#Fennel すごく良いな。ヒロミさんの曲と声はダイバーの時から好きだったけど。 04/19 23:39
  • あらあら、お気を付け下さいまし。 https://t.co/BpUqxHdOZ5 04/19 23:41
  • 【読了】『影憑き 古道具屋 皆塵堂』輪渡 颯介 https://t.co/rNFTf6dEU7 #booklog 04/20 00:22
  • 「わかれみち」「昔の約束あり」「言祝ぎ」「黒煙」「心の底」「ひとめぼれ」『ひとめぼれ まんまことシリーズ 6』 畠中恵 ☆3 https://t.co/tdvgayUsm5 #booklog 04/20 00:27
  • 「質屋蔵」「衝立から除く顔」「幽霊屋敷 出ても見ぬふり」「六連屋と妖刀」「刀を折る者」『祟り婿 古道具屋 皆塵堂 (講談社文庫)』輪渡 颯介 ☆3 https://t.co/jzB11odas8 #booklog 04/20 00:30
  • まじか〜おかんさん再始動するのね♪ 楽しみすぎる。 https://t.co/xPFaUod3TO 04/20 00:40

nice!(0)  コメント(0) 

本日のつぶやき: まとめ 2023/04/19

  • #田園都市線 昼の人身事故の影響がなんでこんな時間まで引きずっとるのか。怠慢か? 04/18 19:39
  • 講談社もグルだったのか。クソだな。| 講談社文庫、作家・相沢沙呼氏にお詫び 「medium 霊媒探偵城塚翡翠」のドラマ化をめぐり #SmartNews https://t.co/t25xsCcjR4 04/18 22:23

nice!(0)  コメント(0) 

本日のつぶやき: まとめ 2023/04/18

  • 【読了】『祟り婿 古道具屋 皆塵堂 (講談社文庫)』輪渡 颯介 ☆3 https://t.co/4t231NDaIf #booklog 04/17 14:15
  • 端から観てない今期数少ないドラマ。原作も好みではないし。| フジ月9「教場0」でもハッキリ…木村拓哉ドラマは共演女優陣に支えられている #SmartNews https://t.co/yMvACELGRD 04/17 15:00
  • カッコ良かった!!! https://t.co/UwC6ZuFfPo 04/17 22:33

nice!(0)  コメント(0) 

本日のつぶやき: まとめ 2023/04/17

  • 【読了】『ひとめぼれ まんまことシリーズ 6』 畠中恵 ☆3 https://t.co/JwkZm34EqJ #booklog 04/16 19:49

nice!(0)  コメント(0) 

本日のつぶやき: まとめ 2023/04/15

  • 「朝を覚えず」八木家の支配町に太源という若い医者が越してきた。そしてその太源が自身で調合したよく眠れ...『ときぐすり まんまことシリーズ 4』畠中 恵 ☆3 https://t.co/OyAx33cCQz #booklog 04/14 17:31

nice!(0)  コメント(0) 

本日のつぶやき: まとめ 2023/04/14

  • #羊文学 #DayDay 生演奏良かった〜♪ テレビだとどうしてもギターの音が大人しくなっちゃうけど仕方ないね。ライブでも最近は抑え気味だし。武田さん、本気でファンみたいだな。共感するなぁ。同年代。 04/13 10:22
  • 【読了】『まったなし まんまことシリーズ 5』畠中 恵 https://t.co/t3po5rJoTa #booklog 04/13 20:39
  • 「まったなし」「子犬と嫁と小火」「運命の出会い」「親には向かぬ」「縁、三つ」「昔から...『まったなし まんまことシリーズ 5』畠中 恵 ☆3 https://t.co/xmlYHGS3cR #booklog 04/13 20:41

nice!(0)  コメント(0) 

本日のつぶやき: まとめ 2023/04/13

  • 【読了】『ときぐすり まんまことシリーズ 4』畠中 恵 ☆3 https://t.co/Mvw4UNb1wv #booklog 04/12 17:40

nice!(0)  コメント(0) 

本日のつぶやき: まとめ 2023/04/12

  • 取り敢えず幼少期のらんまんはつまらない。幼少期終わってからどうなるかがポイントだな。| 朝ドラ「らんまん」がSNS上でさっぱり話題にならないナゾ 不運な外的要因にも悩まされる? #SmartNews https://t.co/rcEIX55z7K 04/11 07:39
  • #羊文学 来週のCD TVライブ! ライブ!に出演するのか! 04/11 08:56
  • 木曜日か〜。微妙だけど、望月さんの弾き語り観たいから行こうかな。 https://t.co/5Tkb2mAmhQ 04/11 23:53
  • なんと川谷絵音、今度はクミコさんとバンド組むのか。イッキュウさんは一緒じゃないのか。2人は一緒のバンドではやらない巡り合わせなのか? https://t.co/RIh1t2xO2x 04/12 00:00

nice!(0)  コメント(0) 
前の10件 | -

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。