【发布时间】:2012-05-06 21:00:00
【问题描述】:
我想通过将随机整数添加到变量来创建字符串来输出字符串。然而,Bash 只是将数字相加。
#!/bin/bash
b=""
for ((x=1; x<=3; x++))
do
number=$RANDOM
let number%=9
let b+=$number
done
echo ${b}
假设每个随机数都是 1,脚本会输出 3 而不是 111。 如何达到 111 的预期效果?
【问题讨论】:
我想通过将随机整数添加到变量来创建字符串来输出字符串。然而,Bash 只是将数字相加。
#!/bin/bash
b=""
for ((x=1; x<=3; x++))
do
number=$RANDOM
let number%=9
let b+=$number
done
echo ${b}
假设每个随机数都是 1,脚本会输出 3 而不是 111。 如何达到 111 的预期效果?
【问题讨论】:
有多种可能性可以实现您想要的行为。让我们先看看你做了什么:
let b+=$number
运行help let:
let: let ARGUMENT...
Evaluate arithmetic expressions.
这就解释了为什么let b+=$number 执行$number 到b 的整数加法(1、2、3)而不是字符串连接。
只需删除let,就会出现所需的行为1、11、111。
执行字符串连接的另一种方法:
b="$b$number"
是的,只需“让b 成为连接b 和number 的结果。
附带说明,b="" 等效于 b=,因为 "" 被扩展为空字符串。对变量的模块操作可以通过算术扩展来完成:number=$((RANDOM%9))。
【讨论】:
((number = RANDOM % 9))