我有以下名为dump.sh的shell脚本
#!/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
答案 0 :(得分:4)
我认为这是一个bash解释器问题,因为它基本上删除了引号。试试这个:
qsub -v Nlay=10,prefix=\"qwerty\" dump.sh
反斜杠可防止引号被解释为bash解释器的指令。
注意:由于bash本身在dump.sh中使用,它可能无法完全解决问题。您可能还需要自己传递反斜杠...这使得它看起来有点笨重,如下所示:
qsub -v Nlay=10,prefix=\\\"qwerty\\\" dump.sh
然后将在dump.sh中显示为\“qwerty \”,然后由bash解释并作为“qwerty”传递给octave。 不确定是否有更流畅的解决方案。
有一个更流畅的解决方案,虽然只是略有一点。就像这样:
qsub -v Nlay=10,prefix='\"qwerty\"' dump.sh
单引号会使它通过反斜杠,但遗憾的是你不能使用两个单引号 - 它不能正确传递''qwerty'。