POSIXとハイフン:保証なし
POSIX標準によれば、関数名は有効な名前である必要があり、名前は次のもので構成できます。
3.231名前
シェルコマンド言語で、ポータブル文字セットのアンダースコア、数字、およびアルファベットのみで構成される単語。名前の最初の文字は数字ではありません。
さらに、エイリアスは有効なエイリアス名でなければなりません。
3.10エイリアス名
シェルコマンド言語で、アンダースコア、数字、およびポータブル文字セットのアルファベットと「!」、「%」、「、」、「@」のいずれかのみで構成される単語。
実装では、エイリアス名内の他の文字を拡張子として許可する場合があります。 (エンファシス鉱山。)
ハイフンはされていないのいずれかの場合には許可されなければならない文字の間に記載されています。したがって、それらが使用される場合、移植性は保証されません。
ハイフンをサポートしないシェルの例
dash
/bin/sh
debian-ubuntuファミリーのデフォルトのシェル()であり、関数名のハイフンをサポートしていません。
$ a-b() { date; }
dash: 1: Syntax error: Bad function name
興味深いことに、それはありません上記のように、これはあるものの、別名でサポートハイフンを実装特性、必要条件ではありません。
$ a_b() { printf "hello %s\n" "$1"; }
$ alias a-b='a_b'
$ a-b world
hello world
busyboxシェル(Almquistシェル)は、関数名のハイフンもサポートしていません。
$ a-b() { date; }
-sh: Syntax error: Bad function name
シェルによるハイフンサポートの概要
次のシェルは、関数名でハイフンをサポートすることが知られています:
次のシェルは、関数名にハイフンをサポートしないことが知られています。
- ash(busybox)、csh、tcsh、dash
結論
- ハイフンは非標準です。クロスシェル互換性が必要な場合は、それらに近づかないでください。
- ハイフンの代わりにアンダースコアを使用します。アンダースコアはどこでも受け入れられます。
-
それらに含まれる名前は悪です。CSS、あなたを見ています。:)