awk中的變量是數字還是字符串會根據上下文轉換,如:
$vi test.sh
#!/bin/bash
aS=$1
bS=$2
awk 'BEGIN {
aA="'$aS'"
bA="'$bS'"
if (aA>bA) { print aA+bA "bigger" }
}'
在命令行輸入 test.sh 4 100,會顯示:
104 bigger
原因是計算四則運算時,awk將其轉換為數字,但比較時轉換為字符串比較了
解決方法:
1、變量需要轉換為數字使用時,手動加0:
#!/bin/bash
aS=$1
bS=$2
awk 'BEGIN {
aA="'$aS'"+0
bA="'$bS'"+0
if (aA>bA) { print aA+bA "bigger" }
}'
2、直接比較改為變量相減后的結果與0比較:
#!/bin/bash
aS=$1
bS=$2
awk 'BEGIN {
aA="'$aS'"
bA="'$bS'"
if (aA-bA>0) { print aA+bA "bigger" }
}'