macOSでループが機能しない

macOSでループが機能しない

macOS 端末で次のシェルスクリプトを実行する必要があります。ループは最初の反復よりも実行されません。

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}

$1orに置き換えると$number_of_jobs同じことが起こります。"${number_of_jobs}"

答え1

あなたのスクリプトはについて書かれていますが、それを使用していzshますbash

bash角かっこ拡張で変数をスコープとして使用することはサポートされていません。

この問題を解決するには、シェルでスクリプトまたは関数の実行をスケジュールしますzsh(特に、スクリプトが表示されているものより長く、他のzsh機能を使用している場合)。デフォルトでは、このシェルはmacOSに/bin/zsh#!/bin/zshzsh

また見なさい:

答え2

ここでの問題は中括弧拡張の変数です。

次のように書き直してください。

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

関連情報