2017-07-06 52 views
0

我试图从命令行执行一个bash脚本。 有时它需要一个包含空格的参数。从命令行执行一个bash脚本,它需要一个空格参数

bash test.sh -l "path/to/image/may contain spaces.png" 

什么是正确的方法来提供此?我试图逃脱\但无济于事。

我收到以下错误;

bash splash.sh -b \#\000000 -l \"img/Rev Logo.jpg\" 
    convert: unable to open image ''"img/Rev'': No such file or directory @ error/blob.c/OpenBlob/3093. 

这涉及到这一点的代码;

logo="$1" 

if checkBackground -eq 1 
     then 
     convert -size $size canvas:$back -background $back $tmp01 
fi 

convert \'$logo\' -background $back $tmp02 

composite $tmp02 -gravity center $tmp01 output.jpg 
+1

无论是双引号引起的变量或使用''\\是合适的。如果你的尝试失败了,也许这个脚本没有适当地引用它的使用参数。更多的细节(例如,test.sh的代码示例)是必需的。 –

+0

我刚刚更新了我的问题,提供了更多信息和代码示例。谢谢 –

回答

2

如果第一个参数的脚本是“富栏”,那么这行:

convert \'$logo\' -background $back $tmp02 

正在经过作为第一个参数,以convert字符串'foo并通过第二个参数bar'。你可能不希望这样。将该行更改为:

convert "$logo" -background "$back" "$tmp02" 

通常,双引号任何变量。

而当您调用脚本时,只需引用该参数即可。如果调用脚本:

bash splash.sh -b \#\000000 -l \"img/Rev Logo.jpg\" 

,那么你传递两个单独的参数:"img/RevLogo.jpg"。有一个双引号的文件名是完全有效的,但非常不寻常。如果你想通过一个参数img/Rev Logo.jpg,你要调用你的脚本:

bash splash.sh -b "#000000" -l "img/Rev Logo.jpg" 

bash splash.sh -b \#000000 -l img/Rev\ Logo.jpg 
相关问题