2011-06-24 19 views
7

有沒有簡單的方法來「加入」傳遞給腳本的參數?我想要類似於[email protected]的東西,但是會立即傳遞參數。加入參數 - 轉義空間

例如,請考慮下面的腳本:

$/bin/bash 

./my_program [email protected] 

當稱爲

./script arg1 arg2 arg3 

my_program將接收參數爲3個分隔的參數。我想,是把所有的參數傳遞爲一個的說法,加入他們 - 用空格隔開,像呼喚:

./my_program arg1\ arg2\ arg3 

回答

13

使用這一個:

./my_program "$*" 
3

我有一個今天非常類似的問題,並想出了這樣的代碼(包括健全檢查):

#!/bin/sh 

# sanity checks 
if [ $# -lt 2 ]; then 
    echo "USAGE : $0 PATTERN1 [[PATTERN2] [...]]"; 
    echo "EXAMPLE: $0 TODO FIXME"; 
    exit 1; 
fi 

NEEDLE=$(echo $* | sed -s "s/ /\\\|/g") 
grep $NEEDLE . -r --color=auto 

這個小腳本,可以讓你在所有的網絡搜索各種單詞遞歸在當前目錄下面。您可以使用sed將您的「」(空格)分隔符替換爲您喜歡的任何內容。我用一個轉義管替換一個空格:「」 - >「\ |」結果字符串可以由grep解析。

使用

搜索術語 「TODO」 和 「FIXME」:

./script.sh TODO FIXME 

也許你會奇怪:爲什麼不乾脆直接調用grep的?

grep "TODO\|FIXME" . -r 

答案是,我想做一些後處理結果在一個更高級的腳本。因此,我需要能夠將所有傳遞的參數(模式)壓縮爲一個字符串。這就是這裏的關鍵部分。

康拉德