Не удалось объединить 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. Я что-то упускаю?

  • разница между `for i в {1 .. $ N}` и `для i в $ (seq 1 1 $ N)`
  • выход из петли infinte
  • Есть ли способ загрузить предположительно исходный источник bash-0.99?
  • Различные результаты, вызывающие bash напрямую или через soft link
  • Как я могу отсортировать этот массив чисел?
  • Команда Bash не выполняется из сценария, но работает при вводе в терминал
  • Вычислить данные Kb / s для конкретного PID
  • Являются ли «расширение имени файла» и «расширение имени пути» тем же самым в Bash?
  • 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 переменной пусто, поэтому вы видите пустую строку на выходе.

    Linux и Unix - лучшая ОС в мире.