双引号无法帮助我传递带空格的字符串参数

Double quotes is not helping me to pass a string argument with spaces

我正在编写一些 bash 脚本,以便使用 oar syntax 更轻松地将作业提交到计算集群,并且对于我需要的选项,他们说他们使用 SQL 语法(选项 -p)。

对于某些上下文,这是我正在使用的命令:

oarsub -q production -p "GPU = 'GTX 980'" -l "nodes=1,walltime=00:05" -I

我希望能够根据用户提供的输入更改 GTX 980 和 00:05。

我已经成功地将时间作为输入并保持 GPU 固定:

oarsub -q production -p "GPU = 'GTX 980'" -l "nodes=1,walltime=" -I

我已经尝试使用这些答案中所述的双引号 , 2, 3。但似乎参数扩展一直在发生:

echo ""
oarsub -q production -p "GPU = """ -l "nodes=1,walltime=" -I
manuel@machine$: bash job_script.sh 00:05 'GTX 980'
GTX 980
...
/!\ You asked for an Interactive job SO I will ignore arguments: 980 ; Is your syntax right?
...
[ADMISSION RULE] Job properties : (GPU = GTX) AND maintenance = 'NO'
Generate a job key...
Bad resource request (ERROR:  column "gtx" does not exist
LINE 4: ...alltime >= 300 OR max_walltime <= 0)) AND ((GPU = GTX) AND m...

似乎没有将整个 'GTX 980' 作为一个完整的字符串,而是将它们拆分为 'GTX' 和 '980',因为:/!\ You asked for an Interactive job SO I will ignore arguments: 980 ; Is your syntax right?警告。

我可以将 GPU 名称作为 bash 输入参数传递给命令吗?或者 bash 如何格式化和将输入传递给 oarsub?

之间可能存在一些问题

Oguz ismail 在 中的建议完全正确。但是,如果另一个位置参数 </code> 的值也可能 包含一些空格,你也应该引用它。既然这些引述确实 否则无妨,无论如何都要引用它:</p> <pre><code>oarsub -q production -p "GPU = ''" -l "nodes=1,walltime=''" -I

请注意:调用 shell 将其扩展为

oarsub -q production -p GPU = 'blah blah' -l nodes=1,walltime='foo bar' -I

其中 GPU = 'blah blah'nodes=1,walltime='foo bar' 被视为单个单词,按原样作为单个参数传递给 oarsub

除此之外,一般情况下,命令行的引用部分没有必要分层嵌套:你可以简单地将它们连接起来,基本上是这样的:

oarsub -q production -p 'GPU = '\'""\' -l 'nodes=1,walltime='\'""\' -I

通过这种方式,您可以完全控制扩展的部分以及分词的部分。但是,这在您的情况下不是必需的。所以你可以按照上面的建议去做,这些建议更容易阅读,因此也更清晰。