bash - 从 MySQL 读取的嵌套 while 循环中的 IFS 的 BASH 问题
问题描述
我的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
问题来自“为什么我们”——如果你注意到破折号出现在错误的位置——显然是一个分隔符问题,因为那里有一个空格..现在如果我将第一个循环更改为:
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 -
您会注意到破折号都在错误的位置,但是“为什么我们”中有正确的空格。 除此之外,我的嵌套循环没有运行。我对处理这些名称中的空格的“正确”方法感到非常困惑,并且仍然获得所需的嵌套输出!我哪里错了?
资源
SO QUESTION 这个在嵌套时解决了 IFS,但在错误的上下文中,无法使用
所以问题 再次同样的问题......显然我尝试了他们在答案部分的内容无济于事。
解决方案
推荐阅读
- python - 如何在没有循环的情况下在 Python 中有条件地设置 DataFrame 列值
- javascript - 防止按键进入由键盘事件聚焦的元素
- github - Github 服务连接未使用 Azure Devops 更新
- gnuplot - gnuplot:添加偏移量时 splot pm3d 工件
- java - 使用服务帐户(或)AD 帐户向 SQL Server 2016 进行身份验证
- javascript - 为什么我的 css 媒体查询不能正常工作?
- ios - Appcelerator VS iOS OpenCV 模块
- python - 当父级被销毁/取消引用时,Tkinter 如何处理子小部件?
- python - 使用 Jupyter notebook 将具有多个工作表的 Excel 文件转换为多个 csv 文件
- spring-boot - 在 applcation.yml 中注入其他 yaml 文件?