首页 > 解决方案 > bash 开关中的算术表达式

问题描述

我希望这个脚本加载字符串参数,检查它的长度,如果它的长度是 1,然后将 1 分配给一个变量,否则分配一个算术表达式给它。我在使用 bash 语法时遇到问题,无法使其正常工作。任何帮助,将不胜感激。这是我的尝试:

#!/bin/bash

stringArg=$1
let myVariable=1
case "${#stringArg}" in
 1) myVariable=1 ;;
 *) myVariable="${#stringArg}*2-2" ;;
esac

echo $myVariable

./test.sh 123用输出运行它3*2-2,但我希望它打印4

标签: bashsyntaxexpression

解决方案


您只是将表达式分配给变量,而不是评估后的实际值。

您可以以各种方式评估表达式,$(())等等bc

#!/bin/bash

stringArg=$1
let myVariable=1
case "${#stringArg}" in
 1) myVariable=1 ;;
 *) myVariable="${#stringArg}*2-2" ;;
esac

echo $(( $myVariable ))

推荐阅读