Не удалось объединить 2 переменные

Мне нужно объединить 2 строковые переменные в bash на моей машине Centos 6

for f in *.tar.gz; do basename ${f%.tar.gz} echo $basename dbaddress='mysql/*.sql' path="${basename}${dbaddress}" echo $path tar -zxvf $f $path done 

Сценарий должен извлекать все .sql-файлы в каталоге basename / mysql /. Но вывод моего кода выглядит следующим образом:

 basename mysql/*.sql tar: mysql/*.sql: Not found in archive tar: Exiting with failure status due to previous errors 

Как вы видите, $ basename не добавляется к $ dbaddress. Я что-то упускаю?

3 Solutions collect form web for “Не удалось объединить 2 переменные”

Вы ссылаетесь на переменную basename$basename ), но никогда не присваиваете ее чему-либо, что означает, что она читает bash как пустую строку. Возможно, вам придется попробовать basename=${f%.tar.gz} .

Вы можете попробовать это, чтобы объединить две переменные:

 var1="Hello" var2="$var1 world!" 

Но в вашем коде вы не объявляете переменную basename !

Попробуйте basename=${f%.tar.gz} .

Чтобы отладить такие проблемы, поместите set -x перед циклом в ваш скрипт, и вы увидите, что выполняет каждая команда ( set +x чтобы отключить это).

Вы увидите, что на самом деле вы выполняете basename ${f%.tar.gz} , предположительно, в файле basename.tar.gz который просто basename но не сохраняет его для какой-либо переменной. Затем вы echo $basename и echo $basename переменной пусто, поэтому вы видите пустую строку на выходе.

  • Как выводить только заданные символы?
  • Сценарий Bash для перебора файлов
  • Запишите любую команду, похожую на `time`
  • Правильный синтаксис для операторов `if ... elif`
  • разница между `for i в {1 .. $ N}` и `для i в $ (seq 1 1 $ N)`
  • Тест регулярного выражения Bash не работает
  • Cryptic Bash Crash
  • Как печатать без форматирования в bash?
  • Bash: извлекать данные из командной строки
  • Как вставить вывод предыдущей команды в текущую командную строку?
  • Bash Ошибка "синтаксическая ошибка: операнд ожидается", но операнд существующий
  • Stat работает в Bash 4.3, но не в Bash 3.2?
  • Linux и Unix - лучшая ОС в мире.