在bash脚本中传递参数

在bash脚本中传递参数,bash,arguments,shift,Bash,Arguments,Shift,我有下面的bash脚本来为脚本的每个参数做一些事情 #! /bin/sh while (($#)); do echo $1 shift done 但是不知怎的,如果我用命令sudo./test.sh foo1 foo2启动它,它将无法工作。真正奇怪的是,如果我输入sudobash test.shfoo1foo2,它就会工作。有人知道这种奇怪行为的原因吗?你试过了吗/bin/bash而不是sh 这里有一个链接可以解释这种差异: 你试过了吗/bin/bash而不是sh 这里有一个链接可以解释

我有下面的bash脚本来为脚本的每个参数做一些事情

#! /bin/sh

while (($#)); do
 echo $1
 shift
done
但是不知怎的,如果我用命令
sudo./test.sh foo1 foo2
启动它,它将无法工作。真正奇怪的是,如果我输入
sudobash test.shfoo1foo2
,它就会工作。有人知道这种奇怪行为的原因吗?

你试过了吗/bin/bash而不是sh

这里有一个链接可以解释这种差异: 你试过了吗/bin/bash而不是sh

这里有一个链接可以解释这种差异:

您已指定/bin/sh作为解释器,它可能不是bash。即使是bash,当调用为/bin/sh时,bash也会在POSIX模式下运行

(())
命令是bash特有的特性。以下内容适用于任何符合POSIX的shell:

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

您已经指定/bin/sh作为解释器,它可能不是bash。即使是bash,当调用为/bin/sh时,bash也会在POSIX模式下运行

(())
命令是bash特有的特性。以下内容适用于任何符合POSIX的shell:

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

这将在
sh
bash
中工作:

for arg
do
    echo "$arg"
done

它执行与脚本相同的操作,而不会破坏参数列表。

这将在
sh
bash
中工作:

for arg
do
    echo "$arg"
done

它执行与脚本相同的操作,而不会破坏参数列表。

脚本的权限是什么?第一次尝试有什么不起作用?如果您正在编写bash脚本,请输入
#/bin/bash
开头。如果您正在编写sh脚本,请不要使用任何bash扩展。请编辑您的问题,以包括当前输出、预期输出和任何错误消息(完整文本)。根据您的描述,无法调试。祝你好运。./test-heh-ehh'gives me./test:6:2:not-found'sudo不相关,但使用bash修复了它。“它不会工作”没有提供任何信息。请发布错误消息或对意外行为的描述。您的脚本有哪些权限?第一次尝试有什么不起作用?如果您正在编写bash脚本,请输入
#/bin/bash
开头。如果您正在编写sh脚本,请不要使用任何bash扩展。请编辑您的问题,以包括当前输出、预期输出和任何错误消息(完整文本)。根据您的描述,无法调试。祝你好运。./test-heh-ehh'gives me./test:6:2:not-found'sudo不相关,但使用bash修复了它。“它不会工作”没有提供任何信息。请发布错误消息或对意外行为的描述。