我想了:
#!/bin/bash
cmd --options \
option=value,\
option=value,\
option=value,\
option=value
但运行bash -x
我得到:
cmd --options option=value, option=value, option=value, option=value
这会导致错误。
我怎样才能做到这一点,这样 bash 就不会自动放置这个空格?
我想了:
#!/bin/bash
cmd --options \
option=value,\
option=value,\
option=value,\
option=value
但运行bash -x
我得到:
cmd --options option=value, option=value, option=value, option=value
这会导致错误。
我怎样才能做到这一点,这样 bash 就不会自动放置这个空格?
嗯,每行的开头确实有空格。尽管它被压缩到一个空格中,但 bash 不会自动删除它。
为了完全避免这种情况,请将脚本编写为
如果您需要将字符串作为
opt1=val1,opt2=val2,...
单个参数传递给命令,但希望将其放在脚本中的多行中以实现可编辑性,则可以使用数组作为中间步骤,然后在运行命令时连接所有数组元素。例如
那打印
somecmd --options opt1=val1,opt2=val2,etc.
(第一对括号是数组赋值语法的一部分,第二对括号启动一个子 shell,以保护脚本的其余部分免受修改。
IFS
该子 shell 可能不是必需的,特别是如果脚本之后不执行任何操作,或者如果您稍后重置IFS
或根本不使用它。)如果您希望能够将每个选项放在自己的行中,您可能需要尝试另一种方法:
另外一个选择:
printf "%s"
打印没有任何空格的参数,因此结果是:某些命令还能够完全自行删除空格,只要它作为单个参数传递即可。因此简单的引用(以防止分词)就足够了,例如
ffmpeg
似乎可以这样:但这取决于您使用的命令如何处理这些选项。
--options
还有一个选项可能会多次使用自身(如果您的命令允许),以防万一ffmpeg
不起作用,但有时也没关系。