我已經在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"`
無:
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腳本中使用相同的命令時,星號(*)在某種程度上不會如預期的那樣被看到或處理。
#3是如何失敗的?隨着你提供的信息,我相信它應該工作。 – tripleee
我希望#3也能工作。那麼'-path「* $ {target} *。pdf」'? – Stphane
請提供'get-ref'的實際實現。 (最有可能的是你使用'$ 1'而不是''$ 1''。) – rici