2016-11-08 3 views
0

Я запускаю цикл inested for в bash, используя структуру для класса. Я написал сценарий, и он работает, но я смущен тем, почему символ (который выделен полужирным шрифтом), в этом случае, необходим в фигурных скобках после структуры -K, когда я уже заявил, что хочу K 1 -5? Это то, что я have-Вложенный цикл цикла в Bash с использованием структуры

for K in {1..5} 
do 
    for run in {1..3} 
    do 
     echo "K = ${K}; run = ${run}" 
     structure -K **${K}** -o K_${K}_run_${run}.txt 
    done 
done 

ответ

1

В вашем сценарии, единственное место вариабельные разложения нужно ограничивающую с ${} является:

K_${K}_run_${run}.txt 

Потому что:

  • Действительная переменная учредительного символы - все алфавитные символы, цифры и символ подчеркивания, в терминах регулярного выражения: [A-Za-z0-9_]

  • Так что вам нужно разграничить одну переменного расширение, если следующий символ также является допустимым переменной составляющей характера

В K_${K}_run_${run}.txt:

  • -${K} потребность ${}, потому что следует _

  • ${run} не требует строгого ограничения, поскольку за ним следует ., который не является допустимым переменной составляющей характер

0

Переменная $K оболочки и опционной программы -K две разные вещи. Вы можете использовать любое имя переменной

for m in {1..5} 
do 
    for run in {1..3} 
    do 
     echo "K = ${m}; run = ${run}" 
     structure -K ${m} -o K_${m}_run_${run}.txt 
    done 
done 

Программа не подразумевает значение для отсутствующего -K из варианта идентично имени переменной оболочки.

for K in {1..5} 
do 
    for run in {1..3} 
    do 
     echo "K = ${K}; run = ${run}" 
     # Wrong: does not assume -K ${K} 
     structure -o K_${K}_run_${run}.txt 
    done 
done