2013-03-16 71 views
1

我有以下的shell腳本命名dump.sh通字符串參數

#!/bin/sh 
#$ -cwd 
#$ -j y 
#module load gcc octave 
octave --eval "dumpoct($Nlay, $prefix);" 

這個腳本加載倍頻模塊,然後評估以下倍頻功能,它只是顯示了兩個輸入參數

function dumpoct(arg1,arg2) 
display(arg1) 
display(arg2) 

當我提交的shell腳本如下,它的工作原理(通過兩個數字作爲參數)

qsub -v Nlay=10,prefix=40 dump.sh 

然而,當我與一個數一個字符串參數提交如下:

qsub -v Nlay=10,prefix="qwerty" dump.sh 

我得到一個錯誤

error: `qwerty' undefined near line 0 column 13 
error: evaluating argument list element number 2 

我也曾嘗試以下,我也得到了同樣的錯誤

qsub -v Nlay=10,prefix='qwerty' dump.sh 
qsub -v Nlay=10,prefix=qwerty dump.sh 

任何想法我可以做到這一點?

謝謝

Giorgos

回答

4

我覺得這是一個bash解釋的問題,因爲它基本上消除了引號。試試這個:

qsub -v Nlay=10,prefix=\"qwerty\" dump.sh 

反斜槓可以防止引號被解釋爲bash解釋器的指令。

注意:由於在dump.sh中使用了bash本身,因此可能無法完全解決問題。您可能還需要通過反斜槓自己......這使得它看起來有點笨重,像這樣:

qsub -v Nlay=10,prefix=\\\"qwerty\\\" dump.sh 

然後將出現在dump.sh爲\「QWERTY \」,這將被解讀通過bash傳遞給八度作爲「qwerty」。 不確定是否有更圓滑的解決方案。

有一個更圓滑的解決方案,雖然只是略有如此。它是這樣的:

qsub -v Nlay=10,prefix='\"qwerty\"' dump.sh 

單引號將它傳遞的反斜槓,但不幸的是你不能使用兩個單引號 - 它不會通過'QWERTY「」正確。

+0

非常感謝!第一個解決方案有效。另外兩個不起作用,因爲它們實際上是作爲輸入傳遞給函數的:dumpoct(10,\「qwerty \」),它給出了八度誤差 – giorgk 2013-03-17 03:35:48