Shell-Script
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_jobs
或"${number_of_jobs}"
這裡的問題是大括號擴展中的變數。
嘗試將其重寫為
for ((i=1;i<=$1;i++)) do #your code here done
您的腳本是為編寫的,
zsh
但您正在使用bash
.
bash
不支持在大括號擴展中使用變數作為範圍。要解決此問題,只需安排在
zsh
shell 中執行腳本或函式(尤其是當腳本比您顯示的內容長並且正在使用其他zsh
功能時)。這個 shell 在 macOS 上預設安裝為/bin/zsh
. 您可以將其添加#!/bin/zsh
為腳本的第一行以使其zsh
預設執行。也可以看看: