从命令行执行bash脚本,该脚本需要带有空格的参数

时间:2017-07-06 11:46:12

标签: bash terminal

我正在尝试从命令行执行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 个答案:

答案 0 :(得分:2)

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

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