在 macOS 中循环不起作用

gog*_*sca 6 osx shell shell-script brace-expansion

我需要在我的 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
}
Run Code Online (Sandbox Code Playgroud)

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

execute_function 10

    Launching 10 jobs
    Launching Job: XX9BWC
    {1..10}
Run Code Online (Sandbox Code Playgroud)

如果我替换:$1$number_of_jobs"${number_of_jobs}"

Kus*_*nda 8

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

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

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

也可以看看:


Jak*_*dra 6

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

尝试将其重写为

for ((i=1;i<=$1;i++))
do
  #your code here
done
Run Code Online (Sandbox Code Playgroud)