如何将星号 (*) 传递给 Bash 脚本中的命令?

How to pass an asterisk(*) to a command inside a Bash script?

我已经对 Google、stackexchange、Whosebug 等做了很多研究。到目前为止,none 的示例满足了使用星号字符的非常简单的用例(不像bash 脚本中的通配符。

以下命令示例完全按照(交互式)终端中的需要工作 window。两个命令给出相同的结果。

  find  /home/will/ref/  -path "*Java Develop*.pdf"
  #
  target="Java Develop"
  find  /home/will/ref/  -path "*$target*.pdf"

问题 objective 是如何将该命令成功地放入具有 find 目标

的脚本中

作为参数通过?对于名为 get-ref 的脚本,如下所示。

   get-ref "Java Develop"`

None 以下(并非详尽)尝试列表:

  1. find /home/will/ref/ -path \"\*$target\*.pdf\"
  2. find /home/will/ref/ -path \"*$target*.pdf\"
  3. find /home/will/ref/ -path "*$target*.pdf"

加上这些例子的几个变体,包括将 -path 参数字符串放在一个变量中——到目前为止,所有这些都设法 拆分 使用 [=87= 的目标] 或接受参数并且 return 什么都没有。在命令行上使用时,大约 3 个文件被 returned.

不过要明确一点,我不关心 $target 中的 space,因为那一侧似乎工作正常。最终 $target 无论如何都将是一个脚本参数。

-- 更新 2015-12-22 --

看来 Bash 版本很重要。这个版本是:

  $ bash -version
  GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu)
  Copyright (C) 2013 Free Software Foundation, Inc.
  License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

朋友运行 与上面的选项大致相同并且它们有效。当我 运行 他的脚本在我的电脑上时,同样的结果,没有输出。

回答问题:

我将 post 我的版本作为答案;也许有人会有更好的方法,或者至少有一个解释可以让 Bash 摆脱困境。

问题在于,当在 Bash 脚本中使用同一命令时,星号 (*) 不知何故未按预期显示或处理。

在一些帮助下,我们找到了该脚本的工作版本。它很短,所以我将 post 放在这里并举个例子。

首先是脚本,get-ref:

  #!/bin/bash
  #
  #   file:       get-ref
  #   usage:      get-ref   <pattern>  
  #
  #     <pattern> ...... target pattern to find
  #  _____________________________________
  #
  target=
  searchPath="$HOME/ref/"
  #
  #  _____________________________________
  #
  #
  find $searchPath   -path "*$target*.pdf"
  #
  echo    "   -------------------------------"
  echo
  exit

(省略调试代码)。这个脚本看起来像问题中的模式#3。这可能意味着我曾经有过答案,但由于其他原因没有奏效(我讨厌这种情况发生)。

此方法适用于我朋友的 Bhodi Linux 发行版,尽管 <shrug> 他的 set -x 没有显示单引号(') 下面。然而...

-path 的处理方式在我们使用时被揭示,set -x 显示查找命令看起来像这样 Bash:

  • + find /home/william/_ref/ -path '"*Java Dev*.pdf"'

似乎脚本(而不是命令终端)在 -path 参数周围注入了单引号 (')。这是缺失的因素。

输出示例:

  $ get-ref "Java Dev"
  + find /home/william/_ref/ -path '*Java Dev*.pdf'
  /home/will/ref/technique/games/The Well-Grounded Java Developer.pdf
  /home/will/ref/technique/bi/JasperReports 3.5 for Java Developers.pdf
  /home/will/ref/lang/ada/Ada for the Cpp or Java Developer.pdf

大结局...

我很高兴我(现在)可以在需要时找到我想要的文档或电子书。感谢您的评论,他们肯定在正轨上。