Знак доллара, чтобы получить значение не работает в моем сценарии оболочки?
Наша школа использует 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