macOS 中的循环不起作用

macOS 中的循环不起作用

我需要在 macOS 终端中执行以下 shell 脚本。循环执行的次数绝不会超过其第一次迭代。

function execute_function() {
# Launch job
  number_of_jobs=$1
  echo "Launching ${number_of_jobs} jobs"
  for i in {1..$1}; do
    job_id=`head /dev/urandom | tr -dc A-Z0-9 | head -c 6 ; echo ''`
    echo "Launching Job: $job_id"
    echo $i
  done
}

当我运行它时,我总是得到:

execute_function 10

    Launching 10 jobs
    Launching Job: XX9BWC
    {1..10}

$1如果我用$number_of_jobsor替换:也会发生同样的情况"${number_of_jobs}"

答案1

您的脚本是为 编写的,zsh但您正在使用bash.

bash不支持在括号扩展中使用变量作为范围。

要解决此问题,只需安排在 shell 中执行脚本或函数zsh(特别是如果脚本比您显示的脚本长并且正在使用其他zsh功能)。默认情况下,此 shell 在 macOS 上安装为/bin/zsh.您可以添加#!/bin/zsh为脚本中的第一行,以使其zsh默认执行。

也可以看看:

答案2

这里的问题是大括号扩展中的变量。

尝试将其重写为

for ((i=1;i<=$1;i++))
do
  #your code here
done

相关内容