1

我必须将一个变量传递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 )

我应该改变什么来获得像上面这样的输出?

4

3 回答 3

2

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

[ sh, print.sh, $data]

因为$data没有被引用,所以变量的值data被标记为

[ Fruits="Apple, Orange"]

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

[ sh, print.sh, Fruits="Apple, Orange"]

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

听起来您实际上希望这是一个参数print.sh,而不是两个。根据 Pierre-Louis Laffont 的回答,使用"$data"代替$data会实现这一点

于 2012-12-14T10:39:50.677 回答
1

让你的电话在双引号之间变数:

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

$ ./script.sh "$data"  
Fruits="Apple Orange"
于 2012-12-14T10:22:16.840 回答
0

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

echo $1
echo $2

你应该试试

echo $1 $2

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

于 2012-12-14T10:27:01.553 回答