web-dev-qa-db-ja.com

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}

私が置き換えた場合も同じことが起こります:$1$number_of_jobsまたは"${number_of_jobs}"

6
gogasca

ここでの問題は、中括弧の展開によって異なります。

それを書き直してみてください

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

スクリプトはzsh用に作成されていますが、bashを使用して実行しています。

bashは、ブレース展開での範囲としての変数の使用をサポートしていません。

これを解決するには、スクリプトまたは関数がzshシェルで実行されるように調整します(特に、スクリプトが表示されているものより長く、他のzsh機能を使用している場合)。このシェルは、macOSにデフォルトで/bin/zshとしてインストールされます。スクリプトの最初の行に#!/bin/zshを追加して、デフォルトでzshで実行することができます。

以下も参照してください。

8
Kusalananda