簡體   English   中英

bash:使用雙引號參數調用腳本

[英]bash: calling a scripts with double-quote argument

我有一個bash腳本,其中的參數用雙引號引起來,它在給定的邊界內創建地圖的形狀文件,例如

$ export_map "0 0 100 100"

在腳本中,有兩個select語句:

select ENCODING in UTF8 WIN1252 WIN1255 ISO-8859-8;
...
select NAV_SELECT in Included Excluded;

當然,這兩個語句要求輸入要輸入數字作為輸入。 可以通過將數字加上換行符到腳本中來繞過此操作。

為了節省時間,我想有一個腳本,可以為ENCODING (4個選項)和NAV_SELECT (2個選項)的每種組合創建8個地圖。

我已經將另一個bash腳本create_map作為包裝器寫入服務器:

#!/bin/bash

for nav in 1 2 3 4;
do
    for enc in 1 2;
    do
        printf "$nav\n$enc\n" | /bin/bash -c "./export_map.sh \"0 0 100 100\"" 
    done
done

**這有效(謝謝Brian !),但是我找不到從外部腳本外部傳遞數字參數"0 0 100 100" **

基本上,我正在尋找一種方法來接受雙引號中的參數到包裝bash腳本,並將其(帶有雙引號)傳遞給內部腳本。

說明:

export_map是主要的腳本,從被稱為create_map 8倍。

有任何想法嗎?

謝謝,

亞當

如果我正確理解了您的問題(我不確定,請參閱我的評論),則應該在printf添加另一個\\n 默認情況下, printf不像echo那樣添加尾隨換行符。 這將確保第二個值將被select命令正確讀取,我假設該命令出現在export_map.sh

printf "$nav\n$enc\n" | /bin/bash -c "./export_map.sh \"100 200 300 400\""

另外,我認為您不需要添加/bin/bash -c和引號。 以下內容就足夠了,除非我遺漏了一些東西:

printf "$nav\n$enc\n" | ./export_map.sh "100 200 300 400"

編輯感謝您的澄清。 為了將包裝器腳本中的一個參數傳遞到內部腳本中,並將其作為單個參數傳遞,您可以傳遞"$1" ,其中的引號表示您希望將此分組保留為一個參數,而$1是包裝腳本的第一個參數。 如果要將所有參數從外部腳本傳遞到內部腳本(每個參數都保留為單個參數),則可以使用"$@"代替。

#!/bin/bash

for nav in 1 2 3 4;
do
    for enc in 1 2;
    do
        printf "$nav\n$enc\n" | ./export_map.sh "$1"
    done
done

這是"$@"工作原理的快速示例。 首先, inner.bash

#!/bin/bash

for str in "$@"
do
    echo $str
done

outer.bash

#!/bin/bash

./inner.bash "$@"

並調用它:

$ ./outer.bash "foo bar" baz "quux zot"
foo bar
baz
quux zot

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM