bash - 对包含 * 的字符串进行 for 循环迭代
问题描述
我有一个文件,它是由另一个具有文件名的脚本创建的。唯一的问题是它包含 * 用于类似的文件名。现在我想在这个文件上迭代一个 for 循环来执行一些操作,但我想在不同的服务器上执行它,因为我只需要该文件中完全相同的名称。为此,我使用了 grep 并将其传递给 'for' 循环进行一一执行。但是在进行循环之前,它实际上在当前服务器本身上执行它并给出错误的输出。我不知道我错过了什么。
# node_name=auxiliary;grep -F $node_name /opt/log_automation/ME_log_sheet.csv|awk -F "," '{print $2}'
/opt/tpa/logs/install_SPS.*.log
/opt/tpa/logs/localization.log
/opt/tpa/logs/SPI.*.log
/opt/tpa/logs/TPA_system.log
#
这似乎按预期工作,因为我希望 * 出现在名称中。现在,如果我把它放在一个变量中或将它传递给循环它会扩展并给出我不想要的实际存在的文件。我希望它只返回带有 * 的名称。
# node_name=auxiliary;myvar=$(grep -F $node_name /opt/log_automation/ME_log_sheet.csv|awk -F "," '{print $2}');echo $myvar
/opt/tpa/logs/install_SPS.2019.02.09-12:12.log /opt/tpa/logs/localization.log /opt/tpa/logs/SPI.2019.02.09-12:10.log /opt/tpa/logs/TPA_system.log
# node_name=auxiliary;for i in $(grep -F $node_name /opt/log_automation/ME_log_sheet.csv|awk -F "," '{print $2}');do echo $i;done
/opt/tpa/logs/install_SPS.2019.02.09-12:12.log
/opt/tpa/logs/localization.log
/opt/tpa/logs/SPI.2019.02.09-12:10.log
/opt/tpa/logs/TPA_system.log
请帮我解决这个问题。我究竟做错了什么?PS:经过一些更改后,我添加了带有 grep 的“-F”。无论哪种方式,它都不起作用。
解决方案
引用所有变量:
node_name=auxiliary
for i in "$(grep -F $node_name /opt/log_automation/ME_log_sheet.csv|awk -F "," '{print $2}')"
do
echo "$i"
done
推荐阅读
- gitlab - Gitlab CI 将文件传送到远程服务器(rsync)
- azure-active-directory - 如何撤销在 Azure AD 代表用户流上生成的令牌?
- javascript - 节点找不到文件
- react-native - 具有大数据的聊天应用程序中的平面列表(对话屏幕)会减慢其他组件的速度
- python - 何时使用 SQLalchemy 核心与 SQLalchemy ORM?
- java - super.onBackPressed(); 导致图像返回重复,因为我调用了两次。我该如何重写它来解决这个问题?
- python-3.x - 将相似用户划分为社交组
- android - 如何使用 Kotlin 从 Android 中的片段访问另一个片段?
- bash - 使用插入的Postgres文本到数组文本
- python-3.x - 为什么 TCS MockVita 显示此 python 代码的运行时错误