1

我正在尝试验证变量的格式是否为数字,并且在期望脚本中至少有 10 位数字,前导零。

在 bash 脚本中,它看起来像这样:

[[ "$var" != +([0-9]) ]] && echo "bad input" && exit
while [[ $(echo -n ${var} | wc -c) -lt 10 ]] ; do var="0${var}" ; done

对于以下输入:

16

我正在尝试实现以下输出:

0000000016

4

2 回答 2

2

检查变量是否只有数字的最简单方法是使用正则表达式。Expect 的正则表达式完全可以胜任:

if {![regexp {^\d+$} $var]} {
    puts "bad input"
    exit
}

最好通过格式化值来填充零;如果您知道 C's printf(),您将识别格式:

set var [format "%010d" $var]
于 2012-06-08T22:20:31.790 回答
0

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 的返回值。

于 2012-06-08T22:18:06.453 回答