1

変数の形式が数値であり、expect スクリプト内で先頭にゼロを付けて少なくとも 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 を知っている場合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コマンドは比較的新しいため、TCLインタープリターがサポートしていない場合は、正規表現の戻り値に依存する必要がある場合があります。

于 2012-06-08T22:18:06.453 に答える