2015-12-21 91 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 

結局......

我很高興,我可以(現在)查找文檔或電子書我需要的時候需要。感謝您的評論,他們肯定是在軌道上。

相關問題