Знак доллара, чтобы получить значение не работает в моем сценарии оболочки?

Наша школа использует SLURM в качестве системы очередей, где нужно указать некоторые "преамбулы" перед другими командами. Следовательно, сценарий оболочки в этом случае обычно начинается с

#!/bin/bash

#SBATCH -n 10               # Number of cores requested
#SBATCH -N 1                # Ensure that all cores are on one machine
#SBATCH -p general          # Partition to submit to
#SBATCH --mem-per-cpu=20000 # Memory per cpu in MB (see also --mem)
#SBATCH -o out              # Standard out goes to this file 

Теперь я хочу сделать свой основной номер постоянным, что облегчает модификации. я сделал

#!/bin/bash

ZEROTH_PORT=50000
NO_CORES=10

#SBATCH -n $((NO_CORES))    # Number of cores requested
#SBATCH -N 1                # Ensure that all cores are on one machine
#SBATCH -p general          # Partition to submit to
#SBATCH --mem-per-cpu=20000 # Memory per cpu in MB (see also --mem)
#SBATCH -o out              # Standard out goes to this file 

Это не в #SBATCH -n $((NO_CORES)), Как полный новичок в сценарии оболочки, я понятия не имею, почему $((NO_CORES)) здесь возвращает значение NO_CORES,

1 ответ

Решение

$(( … )) является арифметическим контекстом оценки. поскольку NO_CORES является целым числом, и никакие другие операции над ним не выполняются в синтаксисе, результатом является значение раскрытия NO_CORES, Но если вы знаете, что параметр является целым числом, вы можете просто использовать обычное расширение:

NO_CORES=10
SBATCH -n $NO_CORES # -> SBATCH -n 10
Другие вопросы по тегам