首页 > 解决方案 > 对包含 * 的字符串进行 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”。无论哪种方式,它都不起作用。

标签: bashshellscripting

解决方案


引用所有变量:

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

推荐阅读