即使变量用双引号引起来,它也显示为空白

即使变量用双引号引起来,它也显示为空白

我有一个简单的问题要问你,但我自己无法回答。我下面有一个变量,在打印结果后显示空白。

脚本:

core_out=find coretst.*
echo "$core_out"
Result: No display *blank*
#tried to echo without double quotes as well but it has the same result

顺便说一句,我正在使用腻子。

实际目标: 1. 检查 /opt/datintdv/Informatica/9.6.1/server/bin --dir1 中的 core.* - 如果 core.* 存在且大于 1,则获取 1 core.* 然后执行 strings (core.* )| grep “pmdtm(“ --script1 如果 script1 不起作用,则将输出存储在参数中 执行文件(核心文件名) 直到全部核心。已执行,然后将输出存储在变量中。 - 如果 dir1 上不存在 core.*,则检查 /opt/datintdv/Informatica/9.6.1/tomcat/bin 如果 core.* 存在且大于 1,则获取 1 core.*,然后执行 strings (core.*) | grep “pmdtm(“ --script1 如果 script1 不起作用,则将输出存储在参数中 执行文件(核心文件名) 直到全部核心。已执行,然后将输出存储在变量中。 *输出由换行符分隔

  1. 获取所有输出,然后将其连接为电子邮件正文。
  2. 通过电子邮件将其发送给用户。 *我目前正在为此编写脚本,但我遇到了困难,因为这是我第一次这样做。

希望你能帮助我!谢谢!

答案1

命令替换,这意味着使用命令的结果进行内联操作,是通过$( ... ).

就你而言,

core_out=$( find coretst.* )

但是,这将提示find查找以以下内容开头的所有路径coretst.*扩展至的任何内容开头的所有路径。我假设您想要做的是在当前目录或下面查找文件与模式相匹配coretst.*。你会这样做

core_out=$( find . -type f -name 'coretst.*' )

引用该coretst.*模式会阻止 shell 将其扩展为当前目录中的名称。

然后,问题是您想如何处理由此返回的路径名。如果您只想打印它们,则根本不需要变量:

find . -type f -name 'coretst.*'

如果你愿意消除这些文件,那么您应该从以下位置执行此操作find

find . -type f -name 'coretst.*' -exec rm {} +

对文件的任何其他操作也可以从内部执行find

参见问题“为什么循环查找的输出是不好的做法?” 为什么使用find返回的路径可能是一个坏习惯(答案是关于循环 的结果find,我想这就是您稍后可能想要做的事情)。


来自评论:

我想在当前文件夹中搜索它,并且其输出将用于子字符串,因此将用于此:strings ($core_out) | grep "pmdtm("

如果我理解正确的话,这可以通过

find . -type f -name 'coretst.*' -exec strings {} + | grep -F 'pmdtm('

即,运行strings所有找到的文件并查找包含字符串 的行pmdtm(

如果您想知道在哪个文件中找到匹配项:

find . -type f -name 'coretst.*' -exec sh -c '
    for name; do
        if strings "$name" | grep -qF "pmdtm("; then
            printf "%s\n" "$name"
        fi
    done' find-sh {} +

相关内容