【发布时间】:2023-03-25 19:29:01
【问题描述】:
我正在尝试在 Bash shell 中编写一个 for 循环。 这是我想出的:
for i in {0..20..5}
do
echo "Number: $i"
done
但是输出是:
Number: {0..20..5}
我也试过这个代码:
N=10
for i in 1 2 3 4 5 .. $N
do
echo "Welcome $i times"
done
但在这种情况下,输出也是:
Welcome 1 times
Welcome 2 times
Welcome 3 times
Welcome 4 times
Welcome 5 times
Welcome .. times
Welcome 10 times
我想编写一个 for 循环,我可以在其中获取限制以及增量或减量值。
这是完整的脚本:
#! usr/bin/bash
N=10
for i in 1 2 3 4 5 .. $N
do
echo "Welcome $i times"
done
for i in {0..20..5}
do
echo "Number: $i"
done
【问题讨论】:
-
你确定第一个使用的是 bash 吗?
-
是的。我使用的外壳是 bash。我在原始问题@Shawn 中添加了完整的脚本供您参考
-
bash 有
{start..end},但没有{start..end..increment}。此外,由于brace expansion occurs before variable substitution,您不能将变量放入{start..end},除非您使用eval。您可以使用 C 风格的 for 循环——参见手册中的3.2.5.1 Looping Constructs -
{x..y[..incr]}可以在 bash 上正常工作(请参阅:gnu.org/software/bash/manual/bash.html#Brace-Expansion)...但从第 4 版开始使用incr(请参阅:wiki.bash-hackers.org/syntax/expansion/brace) -
@ShouryaShikhar,
#! usr/bin/bash应该是#!/usr/bin/bash,假设 shell 确实在/usr/bin/中。当您省略领先的/时,它不再是绝对路径。 (顺便说一句,如果您不知道/usr/bin是正确的,请使用#!/usr/bin/env bash,这样PATH 将用于查找;这对于可能在非操作系统中拥有更新版本的bash 的MacOS 用户尤其重要-供应商提供的位置)。