2012-06-21 176 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 

它確實爲腳本的目的是做同樣的事情,而不破壞的說法名單。