此问题在此处已有答案:
When to wrap quotes around a shell variable?(5个答案)
2天前关闭。
我需要构造redis虚拟数据,在构造redis hash
数据时,我希望通过for循环构造a large number of fields
的哈希数据。
我直接调用printf结构来获得所需的结果,但是当存储在变量中时,结果并不是预期的那样,示例代码如下所示
#!/bin/bash
for no in $(seq 5); do
printf "%s%s %s " "$data" "filed$no" "val$no"
done
# stdout:
# bash test.sh
filed1 val1 filed2 val2 filed3 val3 filed4 val4 filed5 val5
保存到变量
#!/bin/bash
data=""
for no in $(seq 5); do
data="$(printf "%s%s %s " "$data" "filed$no" "val$no")"
done
printf "%s\n" $data
# stdout
# bash test.sh
filed1
val1
filed2
val2
filed3
val3
filed4
val4
filed5
val5
这似乎是逃避空格到换行符,我怎么能解决它?我真的很感谢任何帮助与此。
1条答案
按热度按时间f87krz0w1#
引用变量:
如果不加引号,
$data
会展开成数个参数。printf
会重复使用格式规范来做为所有参数。请参阅printf:
必要时会重复使用此格式,以使用所有参数。如果格式需要的参数比提供的多,则额外的格式规格会视情况视为已提供零值或Null字串。成功时传回值为零,失败时传回非零。
简单演示: