2015-12-21 137 views
-1

我已经在Google,stackexchange,stackoverflow等方面做了相当多的工作。到目前为止,没有一个例子满足在bash脚本中使用星号字符(而不是通配符)的一个非常简单的用例。如何将星号(*)传递给Bash脚本中的命令?

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

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

的问题,客观的,是如何成功地把该命令到一个脚本与find目标

  • “Java开发”

作为参数传递?对于名为get-ref的脚本,如下所示。下面的(不是全部)尝试的名单

get-ref "Java Develop"` 

无:

  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 argume nt字符串在一个变量 - 所有到目前为止管理到分裂目标使用空间或接受参数,并返回什么。在命令行上使用时,返回大约3个x文件。

但要清楚,我不关心$target里面的空间,因为那边似乎工作正常。无论如何,最终$target将是一个脚本参数。

- 更新 2015年12月22日 -

看来,猛砸版本是很重要的。这个版本是:

$ 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> 

一位朋友跑了差不多与上面相同的选项,他们的工作。当我在PC上运行他的脚本时,结果相同,没有输出。

要回答的问题:

  • 一切由不是“找到”的东西失败要么;或者由于我们所假设的错误平衡引号而给出关于字符串“Devel”的错误。
  • 我用set -x和结果已经找到了一个答案,在这个bash上工作(见张贴的答案)。

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

担心的是,在Bash脚本中使用相同的命令时,星号(*)在某种程度上不会如预期的那样被看到或处理。

+1

#3是如何失败的?随着你提供的信息,我相信它应该工作。 – tripleee

+0

我希望#3也能工作。那么'-path“* $ {target} *。pdf”'? – Stphane

+1

请提供'get-ref'的实际实现。 (最有可能的是你使用'$ 1'而不是''$ 1''。) – rici

回答

0

有一点帮助,我们找到了这个脚本的工作版本。它很短,所以我会在这里发布并给出一个例子。

首先是脚本,得到-REF

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

调试代码省略)。这个脚本看起来像问题中的模式#3。这可能意味着我有一次的答案,但它没有为其他原因工作(我讨厌它,当发生这种情况)。

这种方法与我的朋友的Bhodi Linux发行版的工作虽然< 耸肩>他set -x没有表现出单报价如下,()。然而...

方式-path的处理,当我们使用透露,set -x这表明find命令看起来像这样给击:

  • + 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 

结局......

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

相关问题