如何在Shell中直接将数学表达式作为命令行工具的标志参数?
在Shell命令参数中直接使用数学表达式
要在命令行工具的参数里直接计算数学表达式,主流Shell提供了几种实用方式,最常用的是算术扩展$((...)),另外也可兼容老式Shell使用expr命令。
方法1:使用算术扩展$((...))
这是Bash等现代Shell最推荐的写法,语法简洁,支持加减乘除、取余等常见算术运算。
针对你的需求,直接把数学表达式嵌入$((...))即可:
tmp0=2 # 直接在cut的-f参数中计算表达式结果 $(cat something | cut -d " " -f$((2*tmp0+3)))
注意:$((...))内部引用变量时无需加$前缀,直接写变量名即可,当然加$也能正常运行,但前者更简洁。
方法2:使用expr命令
如果需要兼容老式Shell(比如POSIX标准Shell),可以用expr命令通过命令替换传入计算结果:
tmp0=2 # expr中乘法符号*需要加反斜杠转义,避免被Shell解析为通配符 $(cat something | cut -d " " -f$(expr 2 \* $tmp0 + 3))
补充说明
- 算术扩展
$((...))还支持自增++、自减--、比较运算等,内部可以保留空格提升可读性,比如$(( 2 * tmp0 + 3 ))同样合法。 - 除法运算
/在算术扩展中是整除,仅保留整数部分;取余运算用%实现。
内容的提问来源于stack exchange,提问作者George
相关产品推荐
相关产品推荐

