【问题标题】:assign a command to a variable containing file paths将命令分配给包含文件路径的变量
【发布时间】:2017-12-07 09:52:27
【问题描述】:

我一直在寻找有关分配给 shell 中变量的命令的答案,但没有成功。我的脚本查找一个名为 2015may 的文件夹,该文件夹包含一个文件 4444444.xml。命令 find /path/zipfolders -name "*${array[$((i+1))]}*" -exec grep -l "${array[$i]}" {} + 使用这些参数 ["2015may","44444444"] 显示以下输出:path/filename_2015may.zip。问题是这个命令在将它分配给$command 时返回''。我认为将其分配给$command 时出现语法错误。感谢您为解决此问题提供的帮助。

脚本

command=$(find /path/zipfolders -name "*${array[$((i+1))]}*" -exec grep -l "${array[$i]}" {} +)
echo "$command"

实际输出

find /path/zipfolders -name "*${array[$((i+1))]}*" -exec grep -l "${array[$i]}" {} +
++ find /path/zipfolders -name '*2015may*' -exec grep -l 44444444 '{}' +
+ command=
+ echo ''

期望的输出

path/filename_2015may.zip

【问题讨论】:

  • 您不需要zgrep 在zip 文件中搜索。

标签: bash shell command variable-assignment


【解决方案1】:

要将命令输出分配给 shell 变量,请将命令括在反引号(``)中。所以你的命令看起来像这样:

    command=`(find /path/zipfolders -name "*${array[$((i+1))]}*" -exec grep -l "${array[$i]}" {} +)`
    echo $command

【讨论】:

  • $( ) (在问题中使用)通常比反引号更受欢迎,因为它更易于阅读,并且因为在反引号内转义(和嵌套)存在一些奇怪之处。见BashFAQ #82。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-24
  • 2021-06-11
  • 1970-01-01
  • 2021-02-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多