Никогда не используйте eval
, за исключением, может быть, если нет другого пути И вы действительно знаете, что делаете.
STATD$counter=$(...)
должно выдавать ошибку. Это недопустимое назначение, потому что строка "STATD$counter
" не является допустимым именем переменной. Что произойдет (на конкретном примере, если счетчик оказался равным 3 и ваш конвейер в выводе $( )
«output»), bash расширит эту строку только до «STATD3=output
», поэтому попытается найти команду с именем "STATD3=output
" и запустите ее. Скорее всего, это не то, что вы хотели.
Звучит так, будто все, что вы хотите сделать, может быть достигнуто с помощью массивов. Если вы не знакомы с массивами bash, посмотрите Wiki Грега , в частности эту страницу или страницу руководства bash, чтобы узнать, как их использовать.
Например, в цикле, который вы не опубликовали в своем вопросе: сделайте disk
(не DISK
: не используйте все имена переменных в верхнем регистре ) массив, подобный
disk+=( "new value" )
или даже
disk[counter]="new value"
Затем в цикле в вашем вопросе вы также можете сделать statd
массивом и присвоить ему значения с диска на
statd[counter]="... ${disk[counter]} ..."
Стоит повторить: избегайте использования eval
.