Shell-Script

macOS 中的循環不起作用

  • April 2, 2019

我需要在我的 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_jobs"${number_of_jobs}"

這裡的問題是大括號擴展中的變數。

嘗試將其重寫為

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

您的腳本是為編寫的,zsh但您正在使用bash.

bash不支持在大括號擴展中使用變數作為範圍。

要解決此問題,只需安排在zshshell 中執行腳本或函式(尤其是當腳本比您顯示的內容長並且正在使用其他zsh功能時)。這個 shell 在 macOS 上預設安裝為/bin/zsh. 您可以將其添加#!/bin/zsh為腳本的第一行以使其zsh預設執行。

也可以看看:

引用自:https://unix.stackexchange.com/questions/509995