shell - shell 行为中指定大小的 For 循环

标签 shell for-loop terminal

我正在尝试做一件看似简单的事情:一个从命令行获取变量($1)并将其用作 for 循环的长度的脚本。因此,如果命令是终端中的 run.sh:

run.sh 5

将运行 for 循环 5 次。这是我的尝试:

#!/bin/sh

for i in {1..$1};do
 echo $i
done

但我收到的唯一输出是:

{1..5}

我该如何解决这个问题?

注意:我完全是 bash/shell 脚本编写的初学者。

最佳答案

你真的在使用bash shell吗?并非所有 shell(尤其是真正的/bin/sh (bourne) )都支持该功能。要消除您的情况的歧义,请使用

#!/bin/bash

位于脚本的顶部。

一种解决方案是使用

for i in $(eval echo  {1..$1} ); do echo $i; done

eval 表示,“对于当前命令字符串,在本例中 echo ${1..$1},暂不执行该命令,重新评估任何可扩展变量的完整命令行。”

如果您的系统有seq cmd,那么您可以将其重写为

for i in $(seq 1 $1 ); do echo $i; done

seq 是序列的缩写,可以采用任何开始和结束数字,以及可选的“跳过”因子,sa seq 0 5 100 将按 5 进行计数到 100。

我希望这会有所帮助。

关于shell - shell 行为中指定大小的 For 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8314391/

相关文章:

Java Runtime.getRuntime().exec 和垂直条

linux - 如何打印命令的结果以及结果的计数?

linux - cp命令覆盖作为符号链接(symbolic link)的目标文件

java - 为什么在我的字符串数组中的字符串之前打印 null?

ios - swift 2 : guard in for loop?

python - 无法在 for 循环中重置计数器

node.js - 在ubuntu 18.04中安装npm时出错

c- 从不兼容的指针类型传递参数 1 of 'strcpy'

shell - 在 Go 中通过管道命令从控制台读取

php - mysql插入js创建的textareas数组