在BASH脚本中处理包含带引号的字符串的变量

时间:2012-12-14 10:17:41

标签: string bash variables spaces double-quotes

我必须将像data='Type=Eatable Fruits="Apple Orange"'这样的变量传递给bash脚本(print.sh),它只是逐行打印第一个,第二个,第三个命令行参数。

当我将变量data传递给脚本时,通过运行:sh print.sh $data,输出为

Type=Eatable
Fruits="Apple
Orange"

然后需要是

Type=Eatable
Fruits="Apple Orange"
 

第二行还应该打印双引号。 (第三个参数应为NULL / Nothing)

我应该如何更改以获得上述输出?

3 个答案:

答案 0 :(得分:2)

当您运行sh print.sh $data时,它会像这样被标记化:

[shprint.sh$data]

由于未引用$data,变量data的值会被标记化为

[Fruits="AppleOrange"]

然后将其添加到原始命令中以进行

[shprint.shFruits="AppleOrange"]

使用$ 1 = print.sh调用Fruits="Apple,$ 2 = Orange"

听起来你真的希望这是print.sh的一个参数,而不是两个参数。根据Pierre-Louis Laffont的回答,使用"$data"代替$data可以实现这一目标

答案 1 :(得分:1)

用双引号之间的变量打电话:

$ ./script.sh $data
Fruits="Apple
Orange"

$ ./script.sh "$data"  
Fruits="Apple Orange"

答案 2 :(得分:0)

我的两分钱,脚本需要修改。你在用

吗?
echo $1
echo $2

你应该试试

echo $1 $2

当你传递字符串时,我怀疑所有内容都被视为arg1而arg2是空的。通过打印$#。确认。