różnica między sh i bash, gdy używane jest dowiązanie symboliczne

Mam skrypt powłoki, który używaprocess substitution

Skrypt jest:

  #!/bin/bash
  while read line
  do
    echo "$line"
  done < <( grep "^abcd$" file.txt )

Po uruchomieniu skryptu za pomocąsh file.sh Otrzymuję następujące dane wyjściowe

$sh file.sh
file.sh: line 5: syntax error near unexpected token `<'
file.sh: line 5: `done < <( grep "^abcd$" file.txt )'

Po uruchomieniu skryptu za pomocąbash file.sh, skrypt działa.

Co ciekawe,sh jestsoft-link zmapowane do/bin/bash.

$ which bash
/bin/bash
$ which sh
/usr/bin/sh
$ ls -l /usr/bin/sh
lrwxrwxrwx 1 root root 9 Jul 23  2012 /usr/bin/sh -> /bin/bash
$ ls -l /bin/bash
-rwxr-xr-x 1 root root 648016 Jul 12  2012 /bin/bash

Testowałem, aby upewnić się, że w mojej powłoce śledzone są dowiązania symboliczne, korzystając z następujących:

$ ./a.out
hello world
$ ln -s a.out a.link
$ ./a.link
hello world
$ ls -l a.out
-rwx--x--x 1 xxxx xxxx 16614 Dec 27 19:53 a.out
$ ls -l a.link
lrwxrwxrwx 1 xxxx xxxx 5 May 14 14:12 a.link -> a.out

Nie jestem w stanie zrozumieć dlaczegosh file.sh nie działa jak/bin/bash file.sh odsh jest dowiązaniem symbolicznym do/bin/bash.

Wszelkie spostrzeżenia będą bardzo mile widziane. Dzięki.

questionAnswers(1)

yourAnswerToTheQuestion