我正在编写一个bash脚本,它使用其他输入为命令构建一组复杂的参数。到目前为止,该脚本使用该技术完美运行:在Bash命令参数中处理引号和转义空格
whatIwant="command \"$filename-with-spaces-maybe\" -opt1 \"$some_words\" -opt2 $a_number -opt3 \"$a_file_reference\" -opt4 \"$several_sentences\" "
eval $whatIwant
虽然它的作品,我很谨慎使用eval
,因为一个坏的文件名进行破坏的风险的。我希望能够跳过分配变量然后对其进行评估,而只是将该命令放在行首,并让所有参数都由之前在脚本中构建的适当变量设置。
但是,当我尝试这样做时,文件名似乎不被视为单个变量,而是作为多个参数传递给该命令。我尝试了几种双转义形式,但没有设法找到正确评估的东西。这很令人沮丧,因为当我回显我建立命令的变量时,它会完美地复制并粘贴到命令行并执行我想要的操作。
在bash脚本中这样做的最佳做法是什么?
我们真的需要看看你想要完成什么,而不是使用哪种技术来提供真正的点对点答案。也就是说,你的问题几乎肯定由[BashFAQ#50]覆盖(http://mywiki.wooledge.org/BashFAQ/050)。 –
顺便说一句,http://shellcheck.net/是你的朋友捕捉案件时引用是失踪/丢失。 –
另一方面,'command'是一个实际的内建命令的名称,使它成为一个错误的名称用作占位符/示例。 –