1

私はファイル new.sh を持っています

i=5
i=$[i+1]
echo $i

./new.sh を実行すると 6 と表示されます。しかし、「sh new.sh」を実行すると、

$[i+1]

出力として。理由を知りたいだけで、両方で機能するコードが必要です。

4

3 に答える 3

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)) を使用します。$[] の形式は非推奨であり、避ける必要があります。

于 2012-08-25T02:37:13.470 に答える
0

bashが として実行されると、固有の機能shがオフになり、 POSIX シェル標準により厳密に準拠するため、動作が異なります。bash

bashコードを と の両方で同じように動作させたい場合は、構文のサブセットでshコードを記述する必要があります。shbash

于 2012-08-25T01:58:43.603 に答える
0

OS は、最初の行に基づいてファイルの種類を判断します。成功する:

#!/bin/bash
于 2012-08-25T01:47:34.977 に答える