嵌套while中的IFS的BASH问题循环从MySQL读取

时间:2019-01-08 00:59:32

标签: bash nested-loops delimiter do-while ifs

我的bash脚本存在问题-老实说,这是完全了解IFS的问题。

我已经阅读了关于SO的多个问题,但我想似乎是绕圈走,因为没有人专门解决与MySQL有关的问题……但是,我会请您参考。 首先是我遇到问题的脚本:

#!/bin/bash

mysql --login-path=main-data -Nse "SELECT b.name, a.section_id
FROM some_table" | while read section_name section_id; do

echo "$section_name - $section_id"

    mysql --login-path=main-data -Nse "SELECT a.page_id, b.page_url
                FROM some_table" | while read page_id page_url; do
                echo "    - $page_url";
    done

 get_children() {
        mysql --login-path=main-data -Nse " SELECT b.sections_id, b.name
        FROM some_table" | while read child_id section_name; do
            echo "  -- $section_name";
            # If statement goes here -- Then recursive
            if [[ $child_id = *[!\ ]* ]]; then
            section_id=$child_id

            # Now get pages for child sections
            mysql --login-path=main-data -Nse "SELECT page_id, page_url
            FROM some_table" | while read page_id page_url; do
                echo "        - $page_url";
            done

            get_children $section_id
            fi

        done
    }

    get_children $section_id

done

如果我按原样运行IFS的脚本,则输出如下所示:

HOME - 732
    - Home.htm
    - Home2.htm
    - Nome3.htm
WHY - US        742
ROOFING - 743
    - Residential-Roofing.htm
  -- Certainteed
        - CertOverview.htm

问题随“ WHY US”一起出现-如果您注意到破折号以错误的位置结尾-显然是定界符问题,因为那里有空格..现在,如果我将第一个循环更改为:

mysql --login-path=main-data -Nse "SELECT a.page_id, b.page_url
FROM some_table" | while IFS='\n' read page_id page_url; do

我的输出变为:

HOME    732 - 
WHY US  742 - 
ROOFING 743 - 

您会发现破折号全都放在错误的位置,但是“ WHY US”中的空格正确。 除此之外,我的嵌套循环没有运行。我对处理这些名称中的空格的“正确”方法感到非常困惑,但仍然获得所需的嵌套输出!我要去哪里错了?

  
    

资源

         

SO QUESTION     此地址在嵌套时处理IFS,但在错误的上下文中不可用

         

SO QUESTION     还是同样的问题。显然,我尝试了答案部分中的内容,但无济于事。

  

0 个答案:

没有答案