Подстановка значения переменной оболочки - PullRequest
0 голосов
/ 08 марта 2019

Вот описание моей проблемы, у меня есть цикл while, который принимает значения из файла

while read table
do
    schema="$(echo $table | cut -d'.' -f1)";
    tabname="$(echo $table | cut -d'.' -f2)";
    echo "$schema";
    echo "$tabname";
    echo $folder/$table_space"_auto_ddl"/$tabname"_AUTO_"$schema".sql.tmp"
    echo $folder/$table_space"_auto_ddl"/${tabname}"_AUTO_"${schema}.sql
    print $schema.$tabname;
done < $folder/tables_ddl_list.log

Это пример одного значения

MCLM.OPPP

Разбирает значения на 2 переменные Так что после вывода $ schema я бы ожидал MCLM вывод $ tabname. Я ожидаю, что OPPP

Но я получу пустую строку

Я использую kornshell и считаю его более старой версией

Ответы [ 2 ]

1 голос
/ 08 марта 2019

Вы можете написать свой цикл более эффективно, как это, используя read, без необходимости использования внешней команды, такой как cut, для каждого извлекаемого поля:

while IFS=. read -r schema table; do
    # your logic
done < "$folder/tables_ddl_list.log"

Связано:

1 голос
/ 08 марта 2019

Попробуйте удалить двойные кавычки при чтении значений переменных и использовать двойные кавычки в переменной $ table, например:

schema=$(echo "$table" | cut -d'.' -f1)
tabname=$(echo "$table" | cut -d'.' -f2)
...