Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何通过sudo命令运行带有for循环的脚本_Bash_For Loop_Sudo - Fatal编程技术网

Bash 如何通过sudo命令运行带有for循环的脚本

Bash 如何通过sudo命令运行带有for循环的脚本,bash,for-loop,sudo,Bash,For Loop,Sudo,当我发现sudo命令和for循环有问题时,我正在编写一个脚本 我有这个测试脚本 for i in {0..10..2} do echo "Welcome $i times" done for i in $(seq 0 5) do echo "Welcome $(( $i * 2)) times" done 正常输出应如下所示: Welcome 0 times Welcome 2 times Welcome 4 times Welcome 6 times Welcome

当我发现sudo命令和for循环有问题时,我正在编写一个脚本

我有这个测试脚本

for i in {0..10..2}
do
    echo "Welcome $i times"
done
for i in $(seq 0 5)
  do
     echo "Welcome $(( $i * 2)) times"
 done
正常输出应如下所示:

Welcome 0 times
Welcome 2 times
Welcome 4 times
Welcome 6 times
Welcome 8 times
Welcome 10 times
但是它显示:
欢迎{0..10..2}次
有什么想法吗


bash版本:4.3.11(1)-发行版

我不确定是否正确理解了您,但您可以使用下面的代码生成相同的输出。这是我的测试脚本

for i in {0..10..2}
do
    echo "Welcome $i times"
done
for i in $(seq 0 5)
  do
     echo "Welcome $(( $i * 2)) times"
 done
输出


有关
seq
命令的更多详细信息,请参见

好的,脚本如下:

Welcome 0 times
Welcome 2 times
Welcome 4 times
Welcome 6 times
Welcome 8 times
Welcome 10 times
以美元为单位的i的
(序号05)
做
回显“欢迎$($i*2))次”

完成
谢谢。

只有bash4才支持
{0..10..2}
语法

对于Bash 3,请改用以下语法:

$ for ((i=0; i<=10; i+=2)); do echo "Welcome $i times"; done
Welcome 0 times
Welcome 2 times
Welcome 4 times
Welcome 6 times
Welcome 8 times
Welcome 10 times
但是在Bash 4上,它可以按照您的要求工作:

bash-4.3$ for i in {0..10..2}; do echo "i=>$i"; done
i=>0
i=>2
i=>4
i=>6
i=>8
i=>10

编辑

正如Nathan Wilson正确指出的,这可能是Bash选项
braceexpand
为负值的结果

可以使用以下选项设置此值:


sudo
中的外壳不进行支架扩展

$ cat s.sh 
echo $SHELL
echo $SHELLOPTS
for i in {0..10..2}
      do
        echo "Welcome $i times"
      done

$ ./s.sh
/bin/bash
braceexpand:hashall:interactive-comments
Welcome 0 times
Welcome 2 times
Welcome 4 times
Welcome 6 times
Welcome 8 times
Welcome 10 times

$ sudo ./s.sh
/bin/bash

Welcome {0..10..2} times

按照其他人的建议使用
seq()

尝试
for i in$(seq 0 2 10)
Hw您是否正在运行脚本,猜测您正在使用sh。使用bash。不,它向我显示了以下内容:欢迎使用sudo或不使用sudo 0次,我正在使用bash您的bash版本,它工作正常。您在执行脚本时可能做错了什么。嗯,我是通过控制台执行的。因此,如果您的答案(通过单击答案左侧的勾号)令人满意,请记住接受您的答案(所有答案),这将有助于社区,但这并不能回答为什么
欢迎{0..10..2}次
会得到输出的问题。你写的答案也可以写成
for i,单位为$(seq 0 2 10);重复“欢迎$i次”;完成@ReutSharabani评论中提到的
,您可以使用@ReutSharabani评论中提到的
$(seq 0 2 10)
,并且在for循环中
回显“欢迎$i次”
是的,但这不起作用。至少对我来说不是,我已经提到了EDI有4.3.11(1)-releaseIt正在由Bash3执行,而您却没有意识到这一点。尝试插入
echo$BASH\u VERSION
,您可以使用
set-B
set+B