интегрировать переменные массива в команду

#arrays #bash #email #unix

#массивы #bash #Адрес электронной почты #unix

Вопрос:

МОЯ цель — вызвать следующую команду:

 (echo "test";uuencode testfile1.txt testfile1.txt;uuencode testfile2.txt testfile2.txt)|mail -s "subject" "recipient@domain.com"
  

вызов его в командной оболочке работает так, как ожидалось.

Однако я хотел бы сделать это, когда команды uuencode хранятся в массиве:

 ARR=("uuencode testfile1.txt testfile1.txt" "uuencode testfile2.txt testfile2.txt")
  

Я пробовал следующее:

 STR=$(IFS=';'; echo "${ARR[*]}");
(echo "test";"$STR")|mail -s "subject" "recipient@domain.com"
  

но я продолжаю получать следующую ошибку:

 uuencode testfile1.txt testfile1.txt;uuencode testfile2.txt testfile2.txt: command not found
  

Как это исправить?

Я предполагаю, что он не распознает ; как разделитель команд

Комментарии:

1. Хранить команды таким образом в корне неправильно. Можете ли вы привести более реалистичный пример нескольких команд, чтобы мы могли предложить лучшее решение?

Ответ №1:

Похоже, что вы сохраняете каждую команду в виде строки в массиве и объединяете их в строку большего размера. Вы можете сделать eval в строке для выполнения.

 (echo "test";eval "$STR")|mail -s "subject" "recipient@domain.com"