2

我有一个看起来像这样的脚本:

test.sh

!/bin/bash                                                                  
for i in {0..10}                                                          
  do                                                                         
    echo "Welcome $i times"
  done

如果我像只sh test.sh得到Welcome {0..10} times一次那样运行它

但是,如果我运行它,bash test.sh我得到:

Welcome 0 times
Welcome 1 times
 .... and so on

另外,如果我在 redhat 终端上运行相同的脚本。我收到一个错误:

root@UPLC-PPM-DEV-01 TEST]# sh test.sh 
'est.sh: line 3: syntax error near unexpected token `do
'est.sh: line 3: `  do

这里有什么问题?

4

2 回答 2

6

这与for.

{0..10}语法仅受 bash 支持。

在普通的 sh 你可以使用

seq 0 10

(如果您的平台支持),或

i=`expr $i + 1`

创建一个计数器并使用while.

于 2013-08-15T07:44:28.143 回答
3

决定要使用哪个 shell,bashsh. bash有许多语法扩展,你展示其中之一。

现在,您可以这样做:ls -l /bin/sh并找到:

lrwxrwxrwx. 1 root root 4 Apr 16 11:12 /bin/sh -> bash

但不要误以为可以互换shbash。该程序使用一个常见的技巧来检查(在 C 中argv[0])调用它的名称。如果程序按名称调用,sh则它会关闭所有扩展。引用man页面:

"如果使用名称 sh 调用 bash,它会尽可能地模仿 sh 的历史版本的启动行为,同时也符合 POSIX 标准。 "

于 2013-08-15T07:50:37.937 回答