如何将星号 (*) 传递给 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
目标
的脚本中
- "Java Develop"
作为参数通过?对于名为 get-ref
的脚本,如下所示。
get-ref "Java Develop"`
None 以下(并非详尽)尝试列表:
find /home/will/ref/ -path \"\*$target\*.pdf\"
find /home/will/ref/ -path \"*$target*.pdf\"
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>
朋友运行 与上面的选项大致相同并且它们有效。当我 运行 他的脚本在我的电脑上时,同样的结果,没有输出。
回答问题:
- 一切都失败了,不是 'finding' 什么;或由于我们假定引号不平衡而给出有关字符串 "Devel" 的错误。
- 我使用了
set -x
,结果找到了适用于此 bash 的答案(参见 posted 答案)。
我将 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
大结局...
我很高兴我(现在)可以在需要时找到我想要的文档或电子书。感谢您的评论,他们肯定在正轨上。
我已经对 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
目标
- "Java Develop"
作为参数通过?对于名为 get-ref
的脚本,如下所示。
get-ref "Java Develop"`
None 以下(并非详尽)尝试列表:
find /home/will/ref/ -path \"\*$target\*.pdf\"
find /home/will/ref/ -path \"*$target*.pdf\"
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>
朋友运行 与上面的选项大致相同并且它们有效。当我 运行 他的脚本在我的电脑上时,同样的结果,没有输出。
回答问题:
- 一切都失败了,不是 'finding' 什么;或由于我们假定引号不平衡而给出有关字符串 "Devel" 的错误。
- 我使用了
set -x
,结果找到了适用于此 bash 的答案(参见 posted 答案)。
我将 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
大结局...
我很高兴我(现在)可以在需要时找到我想要的文档或电子书。感谢您的评论,他们肯定在正轨上。