某些语言(如 awk 脚本)允许条件赋值。例如,假设您有一个格式为的列表文件:
<item name, no spaces> <price as float>
例如
Grape 4.99
JuicyFruitGum 0.45
Candles 5.99
你想对超过 1 美元的所有东西征税......你可以使用 awk 脚本:
awk '{a=($2>1.00)?$2*1.06:$2; print a}' prices.data
...它使用条件赋值来缩短语法。
但是假设您还想为所有超过 20 美元的商品提供 1 美元的折扣,超过 40 美元的商品也可以享受 2 美元的折扣。好吧,在像 c 这样的语言中,您通常会执行以下操作:
if (price > 40.00) {
price-=2;
price *= 1.06;
}
else if ( price > 20.00 && price <= 40.00 ) {
price--;
price *= 1.06;
}
else if ( price > 1.00 ) {
price*=1.06;
}
...好吧,我发现您可以将 awk 或其他脚本语言混杂到 COMPOUND 分配中。例如:
awk '{a=($2>1.00)?($2>20.00)?($2-1)*1.06:($2>40.00)?($2-2)*1.06:$2*1.06:$2; print a}' prices.data
我的问题是
a)复合赋值(像这样)通常与支持条件赋值的脚本语言普遍兼容?
b)在 awk 脚本中是否有一种非杂乱无章的方式来进行多条件赋值?
澄清一下: 我只是在谈论赋值的简写 (<...>?<...>:<...>;,而不是传统的条件赋值,我已经知道如何进行类似 c 的复合赋值在 Awk 脚本中。作为旁注,至于为什么我可以使用速记,我认为优点是显而易见的——它很短。但是就像正则表达式一样,你可能想写一个很好的描述你的混淆语法为了后代的缘故.