我正在尝试验证变量的格式是否为数字,并且在期望脚本中至少有 10 位数字,前导零。
在 bash 脚本中,它看起来像这样:
[[ "$var" != +([0-9]) ]] && echo "bad input" && exit
while [[ $(echo -n ${var} | wc -c) -lt 10 ]] ; do var="0${var}" ; done
对于以下输入:
16
我正在尝试实现以下输出:
0000000016
检查变量是否只有数字的最简单方法是使用正则表达式。Expect 的正则表达式完全可以胜任:
if {![regexp {^\d+$} $var]} {
puts "bad input"
exit
}
最好通过格式化值来填充零;如果您知道 C's printf()
,您将识别格式:
set var [format "%010d" $var]
Expect 实际上只是 TCL 的一个扩展,因此您可以使用 TCL 提供的任何工具。TCL 是一门不寻常的语言,但做你想做的并不难。
# Set a test string.
set testvar 1234567890
# Store the match (if any) in matchvar.
regexp {\d{10,}} $testvar matchvar
puts $matchvar
# Test that matchvar holds an integer.
string is integer $matchvar
string is command 相对较新,因此如果您的 TCL 解释器不支持它,您可能不得不依赖 regexp 的返回值。