我的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 还是同样的问题。显然,我尝试了答案部分中的内容,但无济于事。