0

スクリプトが機能するのに機能し#!/bin/bashない理由を理解しようとしてい#!/bin/shます。Cygwinと両方sh.exeを実行していますが、bash.exe同じ(同じファイルサイズ)のようです。

$ cat 1.sh
#!/bin/sh
while read line; do
  echo ${line:0:9}
done < <(help | head -5)

$ ./1.sh
./1.sh: line 4: syntax error near unexpected token `<'
./1.sh: line 4: `done < <(help | head -5)'

$ cat 2.sh
#!/bin/bash
while read line; do
  echo ${line:0:9}
done < <(help | head -5)

$ ./2.sh
GNU bash,
These she
Type `hel
Use `info
Use `man
4

2 に答える 2

5

同じファイルであるにもかかわらず、シェルは実行時に自身の名前を分析し、プレーンシェルまたはbashモードに切り替えます。

于 2012-06-16T07:55:25.207 に答える
2

問題点

  1. BashはBourneシェルのスーパーセットであるため、Bashでは、より限定されたシェルでは不可能な多くのことが可能です。
  2. shがbashへのハードリンクである場合でも、shとして呼び出すと動作が異なります。Bashシェルでサポートされている多くの機能は、このモードでは機能しません。

ソリューション

  1. 4行目にあるプロセス置換のような気の利いた機能を含め、スクリプトからバシズムを削除します。
  2. スクリプトをバニラボーンではなくBashとして実行します。
于 2012-06-16T08:03:13.443 に答える