web-dev-qa-db-ja.com

bash / ShellスクリプトでlikeのようなUTF-8文字を使用する必要がありますか?

ここの単純なコードは、bashで起動した場合、私のマシンで期待どおりに機能します。

function ⏰(){
 date
}
⏰

これを使用している他の人に問題があるのでしょうか、それとも普遍的ですか?

今のところ、他のソースコードでこのようなものを見たことがないので不思議に思っています。

編集:無限の可能性があります。たとえば、絵文字の使用法と関数の役割をすばやく区別するために使用できます。

????ファイルを変更または削除できる何かのために、????進行中の作業である場合、????インタラクティブメニューの場合...

これらすべての標準を作成する必要があると思いますが、それは興味深いアイデアのようです。
多分〜5文字のランダムな行は、コードが何をしているかをよく理解するのに役立ちます。 (もちろん、それらを読む方法を学ぶ必要があります。)

もっと編集:私はそれに打撃を与えています。とりあえず、すべての関数をエディター(またはcat myscript.sh|grep function)彼らはこのように見えます。 (私のユニコードはgeanyまたは私の端末でここに比べてはるかに良く見えます。)

function ⬚_1(){
function ⬚⬚_2(){
function ⬚⬚⬚_????_D(){
function ⬚⬚⬚⬚_????_X(){
function ⬚⬚⬚⬚⬚_????_Y(){
function ⬚⬚⬚⬚⬚⬚_❓_P(){
function ⬚⬚⬚⬚_????_Z(){
function ⬚⬚⬚⬚⬚_❓_U(){
function ⬚⬚⬚⬚⬚_❓_O(){

私は奇妙なインデントuseを使用して、関数が互いにどのように関連しているかを示し、記号???? /❓を使用してそれらの役割を明確に区別しています。 (もちろん、これらは実際の関数名ではありません。最後にランダムな文字を付けただけですが、それらがなくても関係を明確に見ることができます。)

36
bob dylan

このための有用なガイドラインは、ほとんどのUnixライクなシステムによって実装される標準のファミリーである「ポータブルオペレーティングシステムインターフェース」(POSIX)です。通常、シェルスクリプトをPOSIXで必須の機能に制限して、異なるシェルやプラットフォームで使用できるようにすることをお勧めします。

「シェルコマンド言語」の 関数定義のPOSIX仕様によると、

関数の名前はfnameです。アプリケーションはそれが名前であることを確認する必要があります(IEEE Std 1003.1-2001の基本定義ボリューム、 セクション3.230、Name を参照)。実装では、拡張機能として関数名に他の文字を使用できます。

「名前」の 定義へのリンクをたどる

シェルコマンド言語では、 portable character set のアンダースコア、数字、およびアルファベットのみで構成されるWord。

その文字セットには、U0000とU007Eの間の文字のみが含まれています。
したがって、「⏰」(U23F0)などの文字は、POSIX準拠の識別子では無効です。

あなたのシェルはそれらを受け入れるかもしれませんが、それはその他も同様であることを保証するものではありません。
異なるプラットフォームやソフトウェアバージョンでスクリプトを使用できるようにするには、このような非準拠の識別子を使用しないようにする必要があります。

55
n.st