の言語を実装する複数のプログラムがあります/bin/sh
。Ubuntuに/bin/sh
はダッシュがあります。これは高速で、少量のメモリを使用するように設計されており、から予想される最小値をはるかに上回りません/bin/sh
。RHELに/bin/sh
はbashがあります。bashはより遅く、より多くのメモリを使用しますが、より多くの機能を備えています。これらの機能の1つは==
、[
条件付き構文の演算子です。Dashは[
基本的なsh機能であるをサポートしています==
が、bash(およびkshとzsh)拡張機能である演算子はありません。
システムをbashを使用するように切り替えることができます。Ubuntuでは、/bin/sh
へのシンボリックリンクdash
です。bash
代わりにシンボリックリンクにすることができます。DebianおよびUbuntu(および派生物)の現在のバージョンは、これをダッシュのインストールオプションにします。変更するには、実行します
sudo dpkg-reconfigure dash
ダッシュをそのままにする/bin/sh
場合は「yes」、bashに切り替える場合は「no」と答えます。
bashをそのまま/bin/sh
にしておくことができますが、システムが少し遅くなります。一部のシステムスクリプトはbashと互換性がないことも考えられますが、bashはほとんどがダッシュのスーパーセットであるため、それはありそうにありません。
の実装を選択するためのインターフェースを持たないディストリビューションの場合/bin/sh
、bashに切り替える方法は次のとおりです。
sudo ln -s bash /bin/sh.bash
sudo mv /bin/sh.bash /bin/sh
ターミナルを開いたままにして、sh
その後もいくつかのスクリプトを実行できることを確認します。このコマンドを台無しにすると、システムが使用できなくなります。(ところで、私が単純な見た目でsudo ln -sf bash /bin/sh
はなく上記の複数のコマンドを使用した理由ln -sf
は、アトミックではありません。この操作中にコンピューターがクラッシュすることはほとんどありませんが、レスキューメディアから起動して復元する必要があります。対照的に、mv
アトミックです。)
ダッシュを次のように復元するには/bin/sh
:
sudo ln -s dash /bin/sh.dash
sudo mv /bin/sh.dash /bin/sh
shが/bin/bash
ディストリビューションでデフォルトである場合、bashにはdashよりも多くの機能があるため、dashに切り替えるとスクリプトが失敗する可能性があることに注意してください。Bashスクリプトはで始まる必要があり#!/bin/bash
、で始まるスクリプト#!/bin/sh
はbash固有の機能を使用するべきではありませんが、bashに付属するディストリビューションは、そのディストリビューションに/bin/sh
固有の#!/bin/sh
スクリプトでbash固有の機能を使用する場合がありますとしてダッシュに切り替えることができ/bin/sh
、これらのスクリプトが別のディストリビューションで機能することは期待できません)。
==
それがあるべきこと=
です。そして、変数展開は二重引用符で囲む必要があります。