2012-06-21 51 views
0

我有以下bash脚本为脚本的每个参数做一些事情参数传递一个bash脚本

#! /bin/sh 

while (($#)); do 
echo $1 
shift 
done 

但不知何故,如果我用命令sudo ./test.sh foo1 foo2它不会工作启动。而真正奇怪的是,如果我输入sudo bash test.sh foo1 foo2它的作品。有人知道是什么导致了这种奇怪的行为?

+0

脚本的权限是什么?第一次尝试什么_doesn't工作? – sarnold

+4

如果您正在编写一个bash脚本,请在开始处输入'#!/ bin/bash'。如果您正在编写sh脚本,请勿使用任何bash扩展名。 –

+0

请编辑您的问题以包含当前输出,预期输出和任何错误消息(完整文本)。根据你的描述,不可能调试。祝你好运。 – shellter

回答

3

您指定/ bin/sh的为你的解释,这可能不是bash的。即使它是bash,当调用/ bin/sh时,bash也会以POSIX模式运行。

(())命令是bash特有的功能。下面将在任何POSIX兼容的外壳工作:

while [ $# -gt 0 ]; do 
    echo $1 
    shift 
done 
1

这将在任一shbash工作:

for arg 
do 
    echo "$arg" 
done 

它确实为脚本的目的是做同样的事情,而不破坏的说法名单。