Создание документов не работает

245
Bercovici Adrian

Здравствуйте, я пытаюсь создать папки и назвать их в соответствии с входными параметрами Что не так в этом скрипте?

root=$1 clcount=$2 clstep=$3 delay=$4 dstep=$5  echo $root echo $clcount echo $clstep echo $delay echo $dstep  echo creating docs  for dindex in {$delay..100..$dlstep} do  for cindex in {$clcount..1..$clstep} do fname=$cindex_$dindex rm -rf $fname mkdir $cindex_$dindex  done done  echo All finished  

Скрипт не будет создавать какую-либо папку ... и он как-то не объединяет значения $cindexи dindexв строку.

0
Расширение скобки работает только с литеральными значениями, а не с переменными. Вместо этого используйте `seq`. choroba 5 лет назад 0

1 ответ на вопрос

2
Kamil Maciorowski
  1. Решайтесь, если это dstepили dlstep.
  2. Из этой ошибки Bash :

    for i in

    BashParser выполняет BraceExpansion перед любыми другими расширениями или заменами. Таким образом, код расширения фигурной скобки видит литерал $n, который не является числовым, и, следовательно, он не расширяет фигурные скобки в список чисел. Это делает почти невозможным использование расширения скобок для создания списков, размер которых известен только во время выполнения.

    Сделайте это вместо этого:

    for ((i=1; i<=n; i++)); do ... done 

    Или используйте seq.

  3. Ваш скрипт читает $cindex_как переменную с именем cindex_. Вы хотите $_.

  4. Кавычки переменные правильно. Это может быть не решающим здесь, но в целом. Например:

    mkdir "$_$dindex" 
  5. Там нет шебанга. Это не имеет значения, если вы поставили сценарий; но если вы запустите его, там должен быть шебанг, как #!/bin/bashили #!/usr/bin/env bash. Из-за $1и $2т. Д. Я предполагаю, что скрипт предназначен для запуска.

Но в моем случае `n` - это аргумент, полученный от ввода. Так мне не нужно` i <= $ n`? Bercovici Adrian 5 лет назад 0
@BercoviciAdrian Этот синтаксис `for` не нуждается в` $ `. Просто попробуйте. Kamil Maciorowski 5 лет назад 0