我必须将像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)
我应该如何更改以获得上述输出?
答案 0 :(得分:2)
当您运行sh print.sh $data
时,它会像这样被标记化:
[sh
,print.sh
,$data
]
由于未引用$data
,变量data
的值会被标记化为
[Fruits="Apple
,Orange"
]
然后将其添加到原始命令中以进行
[sh
,print.sh
,Fruits="Apple
,Orange"
]
使用$ 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是空的。通过打印$#。确认。