♯とは? わかりやすく解説

シャープ【sharp】

読み方:しゃーぷ

[名・形動

鋭敏なさま。「—な切れ味

映像など鮮明なさま。「—な画面

抜け目がないさま。鋭敏。「—な頭脳

シャープペンシル」の略。

音楽で、ある音を半音上げ記号記号「♯」。嬰(えい)記号。嬰。⇔フラット

電話押しボタン用いられる5似た記号通称。「—ダイヤル

[補説] 5嬰記号「♯」とハッシュマーク「#」は異なるが、便宜的にハッシュマークシャープとよぶこともある。


シバン (Unix)

( から転送)

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2025/08/11 01:56 UTC 版)

シバンまたはシェバン (: shebang) とはスクリプト#!から始まる1行目のこと。起動してスクリプトを読み込むインタプリタを指定する。

シェバンやシバンと呼ばれるようになった理由については諸説あるが、一般的には、そこに書かれる2文字が「#」(ハッシュ番号記号)と「!」(bang! バンびっくりマーク)だから、ハッシュ・バン(hash bang)やシャープ・バン(sharp bang)と呼ばれるようになり、それを短く言う際に訛ってシェバンとなった、と説明されている。あるいは、もはもともとは主にシェルを起動していたからシェル・バン(shell bang)と呼ばれ、それが訛ったと説明されることもある。いずれにせよ現在では、これらを縮めたシェバンという呼び方が一般的かつ簡素である[2]。日本の技術書ではシバンと3文字表記することも多い。

概要

シバンは基本的には、スクリプトを記述したファイルにおいて、スクリプトを実行するインタープリタのバイナリを指定するためのものである。

シバンが無かった時代には、スクリプトを実行させる場合、コマンドを書くたびにいちいち「インタープリタ名 + スクリプトのファイル名」を併せて書かなければならなかった。両方明記しなければスクリプトが動かないようでは、頻繁に実行する場合に特に煩わしい。シバンでインタープリタを指定できる仕組みを導入したことで、実行時にはファイル名だけを書けば済むようになった。

シバンを認識するのは、プログラムローダーである。つまり、オペレーティングシステム (OS) の execve システムコール(exec を参照)を処理するルーチン中のプログラムローダーである[注釈 1]

プログラムローダーはファイルの1行目の最初に「#!」を見つけると、1行目の残りの文字列をインタープリタを指定しているものとして扱い、そのインタープリタにこのファイルのパスを渡す。するとそのインタープリタはこのファイルのデータを入力データ(実行すべきスクリプト)として扱い、それを実行する。

インタープリタはシバンを無視する。なぜならシバンの最初の文字は「#」であり、インタープリタにとって「#」は、その行がコメント文だということを意味するからである。

下のように1行目にシバンを書き、2行目以降にスクリプトの本文を書く。 Bourne Shellのスクリプトだと下のようになる。

#!/bin/sh
echo 'Hello world!'

典型的な例をいくつか示す。

  • #! /bin/sh - Bourn Shellでスクリプトを実行する。
  • #! /bin/bash - Bashでスクリプトを実行する。
  • #! /usr/bin/pwshPowerShellでスクリプトを実行する。
  • #! /usr/bin/env python3 – Python3で、envプログラムを使いパスを探す。


注意点

  • シバン行の最大文字数、指定可能な引数の数などは環境依存である。それを逸脱した場合の動作も環境依存である。特に複数個の引数を与えた場合にどう扱われるかはまちまち(普通に扱われる、2個目以降は無視される、空白の入った1個の引数にされる)であるため、注意が必要である[2]
  • ファイルの先頭がバイト順マークになっているUnicode形式のファイルの場合は動作しない。これはバイト順マークのために、OSのプログラムローダーがシバンを認識できなくなるためである。

envコマンドを使う手法

envを使えるインタープリタがいくつかある。

Ruby言語のインタプリタ rubyenv コマンドを用いて実行する場合だと、下のように書くことができる。

#!/usr/bin/env ruby
puts 'Hello world!'

ただし、envを用いる手法はPATH環境変数に依存する。親プロセスが独自にPATHを設定していた場合、想定外の動作をする可能性がある。ruby インタプリタの場合は -x オプションを利用した以下のようなシェルスクリプトに見せかけるトリックを使用したほうが良い。

#!/bin/sh
# -*- ruby -*-
exec ruby -x "$0" "$@"
#!ruby
puts 'Hello world!'

  • ラリー・ウォールのmetaconfigには、シバンを持たないシステムを検出し、スクリプトの先頭の<code>#!/bin/sh</code>を: use /bin/shに置換する機能があった[注釈 2]
  • ELFでは類似の機能として、プログラムヘッダのINTERP型エントリにインタプリタを記述することが出来る。ここには実行可能バイナリが使用する動的リンクライブラリのパス名を設定する。OSは実行可能バイナリと同時にインタプリタとして指定された動的リンクライブラリもロードして動的リンクの処理をさせる。
  • FreeBSDのカーネルバイナリはインタプリタがカーネルでは使用されないことを逆手に取り、インタプリタとして/red/herringを指定している。[3]


歴史

シバンは、ベル研究所デニス・リッチーにより、Version 7 Unix(Unix 第7版)とVersion 8(Research Unix)の間の時期に導入された。また、カリフォルニア大学バークレー校のコンピューター科学研究グループによるBSDのリリースにも追加されており、2.8BSD には存在し、4.2BSD ではデフォルトで有効になっていた。ベル研究所の Version 8 Unix 以降の版は一般公開されなかったため、シバンが人々に広く知られるようになった最初の例はBSDとなった。

Version 7

シバンの一歩手前の段階。

インタープリター指示子無しで、シェルスクリプトをサポートする、というやり方は1979年の Version 7 Unix のドキュメントに見られる。その説明によると、Bourneシェルの機能が実行権限を与えられたファイルを特別なものとして扱い、スクリプトの冒頭に「:」や「#」など特定の文字がある場合に、シェルがサブシェルを起動し、そのファイル内のコマンドを解釈・実行するという仕組みであった。 この方式では、スクリプトはBourneシェル内から呼び出されたときにのみ、通常のコマンドのように動作した。オペレーティングシステムの exec() システムコールを通じて直接スクリプトファイルを実行しようとしても失敗する仕様になっていたため、スクリプトは通常のシステムコマンドのように一貫して動作することはできなかった。

Version 8

「Unix第8版」(Version 8 Unix。Research Unix)以降では、スクリプトと実行ファイルの扱いが異なる問題は解消された。デニス・リッチーは、1980年1月のメール(下に掲載)で、Unix第8版向けにインタープリター指示子のサポートをカーネルに導入したことについて説明した。

From uucp Thu Jan 10 01:37:58 1980
>From dmr Thu Jan 10 04:25:49 1980 remote from research

The system has been changed so that if a file being executed
begins with the magic characters #! , the rest of the line is understood
to be the name of an interpreter for the executed file.
Previously (and in fact still) the shell did much of this job;
it automatically executed itself on a text file with executable mode
when the text file's name was typed as a command.
Putting the facility into the system gives the following
benefits.

1) It makes shell scripts more like real executable files,
because they can be the subject of 'exec.'

2) If you do a 'ps' while such a command is running, its real
name appears instead of 'sh'.
Likewise, accounting is done on the basis of the real name.

3) Shell scripts can be set-user-ID.

4) It is simpler to have alternate shells available;
e.g. if you like the Berkeley csh there is no question about
which shell is to interpret a file.

5) It will allow other interpreters to fit in more smoothly.

To take advantage of this wonderful opportunity,
put

#! /bin/sh

at the left margin of the first line of your shell scripts.
Blanks after ! are OK. Use a complete pathname (no search is done).
At the moment the whole line is restricted to 16 characters but
this limit will be raised.

上のメールの翻訳は下の通り。

From uucp Thu Jan 10 01:37:58 1980
>From dmr Thu Jan 10 04:25:49 1980 remote from research

システムが変更され、実行されるファイルの先頭に
マジック文字 #! がある場合、その行の残りの部分が
そのファイルを解釈するインタープリターの名前であると
理解されるようになりました。

以前(そして実際には今でも)シェルがこの処理の多くを
担当しており、テキストファイルに実行権限がある場合、
そのファイル名をコマンドとして入力すると、シェルが
自動的に自身を起動してそのファイルを実行していました。

この機能をシステム側[注釈 3]に組み込むことにより、
以下の利点があります:

1) シェルスクリプトが、より一層、本物の実行可能ファイルのようになる。
なぜなら、それらを `exec` の対象にできるからです。

2) そのようなコマンドを実行中に `ps` を使うと、
`sh` の代わりに実際の名前が表示されます。
同様に、アカウンティング(実行記録)も実際の名前で行われます。

3) シェルスクリプトに set-user-ID ビットを設定できるようになります。

4) 別のシェルを使うことがより簡単になります。
たとえば、Berkeley の csh を使いたい場合でも、
どのシェルでスクリプトを解釈するかについて疑問が生じません。

5) 他のインタープリターもよりスムーズに組み込むことができます。

この素晴らしい機会を活かすには、シェルスクリプトの先頭行の左端に

#! /bin/sh

と記述してください。
`!` の後に空白があっても問題ありません。完全なパス名を使用してください(検索は行われません)。
現時点では、この行の全体は16文字に制限されていますが、
この制限は今後引き上げられる予定です。


注釈
  1. ^ システムコールではなく、ライブラリでエミュレートする実装も在った(SVR2ベースのEWS-UXなど)。この場合、スクリプトのsetuidsetgidは無視される。
  2. ^ C Shellからスクリプトを実行された際に、Bourne Shellで実行させる為。
  3. ^ この「システム」はカーネルを意味している。
出典
  1. ^ 記事名の制約につき、記事名としての#記号全角井桁
  2. ^ a b The #! magic, details about the shebang/hash-bang mechanism”. www.in-ulm.de. 2022年11月23日閲覧。
  3. ^ freebsd-src/sys/conf/kern.pre.mk at main · freebsd/freebsd-src”. GitHub. 2024年6月27日閲覧。 リンカへのオプションに--dynamic-linker /red/herringが含まれている。

シャープ (記号)

( から転送)

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2025/05/22 01:48 UTC 版)

{
\override Score.TimeSignature #'stencil = ##f
\relative c'' {
  \clef treble \key a \major \time 4/4 ais1
} }

シャープ: sharp)は嬰記号(えいきごう)とも呼ばれ、西洋音楽五線記譜法による楽譜上で半音あげることを意味する変化記号」を指す。形状のよく似た番号記号 (#) とは別記号。イタリア語ではディエジス (diesis)、フランス語ではディエズ (dièse)、ドイツ語ではクロイツ (Kreuz)と呼ばれる。

形状

左右の縦棒は平行に描かれ、左の縦線の右上に右の縦線が来るようにする。交差する斜線は左右の縦線を交差するように描き、2本の斜線は平行になるようにする。平行な斜線は左右にずらさず、同じ位置になるようにする。一般に斜線は縦線よりも太く描かれる。横線を斜線で表記する理由は五線譜の横線と被らないようにするためである。

ダブルシャープ

ダブルシャープ×のような記号で半音あげ、さらに半音あげる記号である[1][2]重嬰記号とも呼ばれる。

{
\override Score.TimeSignature #'stencil = ##f
\relative c'' {
\clef treble \time 4/4 bisis1
} }

さらにシャープを加えた「トリプルシャープ」もあり、一全音半上げることになる。シャルル=ヴァランタン・アルカンの『四つの時代』の第2楽章などで見ることができる。

ただし、一般にシャープを3つ以上使う意味はなく、別の表記を採用すれば済むのであって、このように3つ以上のシャープが書かれている場合はそのような表記に妥当性が存在するかどうかの検討が必要である。

{
\override Score.TimeSignature #'stencil = ##f
\relative c'' {
  \clef treble \time 1/1 \tweak Accidental.stencil #ly:text-interface::print \tweak Accidental.text \markup { \concat { \sharp \doublesharp}} bis1
} }

シャープを用いる固有名詞

番号記号をシャープと呼ぶ固有名詞

  • C# - プログラミング言語。発音は「シー・シャープ」。
  • F# - プログラミング言語。発音は「エフ・シャープ」。
  • J# - プログラミング言語。発音は「ジェイ・シャープ」。
  • #ダイヤル - NTTの短縮ダイヤルの商品名。発音は「シャープダイヤル」。

文字コード

記号 Unicode JIS X 0213 文字参照 名称
U+266F 1-2-84 &#x266F;
&#9839;
シャープ
music sharp sign
𝄪 U+1D12A - &#x1D12A;
&#119082;
musical symbol double sharp
𝄰 U+1D130 - &#x1D130;
&#119088;
musical symbol sharp up
𝄱 U+1D131 - &#x1D131;
&#119089;
musical symbol sharp down
𝄲 U+1D132 - &#x1D132;
&#119090;
musical symbol quarter tone sharp

脚注

関連項目



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「♯」の関連用語

♯のお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



♯のページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
デジタル大辞泉デジタル大辞泉
(C)Shogakukan Inc.
株式会社 小学館
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアのシバン (Unix) (改訂履歴)、シャープ (記号) (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。

©2025 GRAS Group, Inc.RSS