bash - 使用 {$var} 在 for 循环中进行变量替换

标签 bash

我是 bash 脚本的新手,我正在尝试通过制作这个只要求输入一系列数字的小脚本来练习。我会进入前。 5..20 并且它应该打印范围,但是 - 它只是回显我输入的任何内容(本例中为“5..20”)并且不会扩展变量。谁能告诉我我做错了什么?

脚本:

    echo -n "Enter range of number to display using 0..10 format: "
    read range

    function func_printrage
    {
         for n in {$range}; do
         echo $n
         done
    }

func_printrange

最佳答案

  1. bash 中的大括号扩展不会扩展参数(与 zsh 不同)
  2. 您可以通过使用 eval 和命令替换 $()
  3. 来解决这个问题
  4. eval 是邪恶的,因为你需要清理你的输入,否则人们可以输入像 rm -rf/; 这样的范围,而 eval 将运行它
  5. 不要使用 function 关键字,它不是 POSIX 且已被弃用
  6. 使用read-p标志代替echo

但是,出于学习目的,您可以这样做:

read -p "Enter range of number to display using 0..10 format: " range

func_printrange()
{
  for n in $(eval echo {$range}); do
    echo $n
  done
}

func_printrange

注意:在这种情况下,使用 eval 是可以的,因为您只是echo'ing 范围

关于bash - 使用 {$var} 在 for 循环中进行变量替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5447302/

相关文章:

bash - Ubuntu:仅允许为受限用户运行具有特定参数的特定命令

bash - 在 bash 中创建 RS256 JWT

html - 使用 bash sed 编辑 html 文件

linux - SSH 到远程服务器 Bash 编程

linux - 如何在 block 内写入确切的字符串而不是执行它们?在 Bash 中使用 << EOF 时?

用于重定向流的 Linux 脚本

linux - 识别进程的资源使用情况 : CPU, 内存和 I/O

bash - 使用 bash 将每组 N 行合并为一行

bash - 使用 curl (BASH) 通过 Pingdom API 暂停 Pingdom 检查

bash - 为什么 docker exec 在退出时杀死 nohup 进程?