双引号无法帮助我传递带空格的字符串参数
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
通过这种方式,您可以完全控制扩展的部分以及分词的部分。但是,这在您的情况下不是必需的。所以你可以按照上面的建议去做,这些建议更容易阅读,因此也更清晰。
我正在编写一些 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
我已经尝试使用这些答案中所述的双引号
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 在 请注意:调用 shell 将其扩展为 其中 除此之外,一般情况下,命令行的引用部分没有必要分层嵌套:你可以简单地将它们连接起来,基本上是这样的: 通过这种方式,您可以完全控制扩展的部分以及分词的部分。但是,这在您的情况下不是必需的。所以你可以按照上面的建议去做,这些建议更容易阅读,因此也更清晰。</code> 的值也可能
包含一些空格,你也应该引用它。既然这些引述确实
否则无妨,无论如何都要引用它:</p>
<pre><code>oarsub -q production -p "GPU = ''" -l "nodes=1,walltime=''" -I
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