私はファイル new.sh を持っています
i=5
i=$[i+1]
echo $i
./new.sh を実行すると 6 と表示されます。しかし、「sh new.sh」を実行すると、
$[i+1]
出力として。理由を知りたいだけで、両方で機能するコードが必要です。
多くの Linux ディストリビューションはスクリプトの標準シェルとしてダッシュを使用するため、/bin/sh は /bin/dash へのシンボリック リンクにすぎません。これはより軽量ですが、bash と比較して一部の機能が遅れます。それを確認してください:
ls -l /bin/sh
POSIX 互換のスクリプトを書きたい場合は、foo=$n; を使用する必要があります。foo=$((n++)) の代わりに $((n=n+1)) を、foo=$((++n)) の代わりに foo=$((n=n+1)) を使用します。$[] の形式は非推奨であり、避ける必要があります。
bash
が として実行されると、固有の機能sh
がオフになり、 POSIX シェル標準により厳密に準拠するため、動作が異なります。bash
bash
コードを と の両方で同じように動作させたい場合は、構文のサブセットでsh
コードを記述する必要があります。sh
bash
OS は、最初の行に基づいてファイルの種類を判断します。成功する:
#!/bin/bash