如何将星号(*)传递给Bash脚本中的命令?
我已经在Google,stackexchange,*等方面做了相当多的工作。到目前为止,没有一个例子满足在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"`
无:
find /home/will/ref/ -path \"\*$target\*.pdf\"
find /home/will/ref/ -path \"*$target*.pdf\"
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脚本中使用相同的命令时,星号(*)在某种程度上不会如预期的那样被看到或处理。
有一点帮助,我们找到了这个脚本的工作版本。它很短,所以我会在这里发布并给出一个例子。
首先是脚本,得到-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
结局......
我很高兴,我可以(现在)查找文档或电子书我需要的时候需要。感谢您的评论,他们肯定是在轨道上。
#3是如何失败的?随着你提供的信息,我相信它应该工作。 – tripleee
我希望#3也能工作。那么'-path“* $ {target} *。pdf”'? – Stphane
请提供'get-ref'的实际实现。 (最有可能的是你使用'$ 1'而不是''$ 1''。) – rici