1

我有以下名为 dump.sh 的 shell 脚本

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

此脚本加载 octave 模块,然后评估以下 octave 函数,该函数仅显示两个输入参数

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

知道我该怎么做吗?

谢谢

乔戈斯

4

1 回答 1

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''。

于 2013-03-17T00:37:24.630 回答