bash - 为什么我会收到这个一元运算符预期的错误?
问题描述
我有一个 bash 脚本,我从字符串中获取一个数字并使用 bash 中的 expr 命令将其转换为 INT。然后我想看看第一个数字是否大于第二个数字。当我运行脚本时,我得到:unary operator expected
我的脚本是:
#!/bin/bash
name1="19.5"
name2="19.1"
name3=`expr $name1`
name4=`expr $name2`
if [ $name3 >= $name4 ]; then
echo "${name3} is greater than ${name4}"
fi
我究竟做错了什么?我没有正确地将字符串编号转换为 INT 吗?
解决方案
>
是重定向标准输出的操作符。因此,您试图将]
命令的标准输出重定向到一个名为 的文件=
,该文件只留下[
两个参数($name3 和 $name4)。
因此,如果要进行文本[
比较,则必须使用代替[[ ... ]]
,这不是命令,而是 bash语法的一部分,并且在括号之间,重定向规则不适用。但是,您仍然没有<=
作为运算符,而只有<
and >
。在你的情况下,这将是
if [[ ! $name4 < $name3 ]]; then ....
如果你想比较浮点数,并坚持使用 bash,你可以使用bc
并做
if [[ $(bc <<< "$name3 <= $name4") == 1 ]]; then
或者你用 zsh 而不是 bash 编写完整的 shell 脚本,然后免费获得浮点运算:
if (( name3 >= name4 )); then # zsh only!
推荐阅读
- assembly - RISC-V执行+RISC-V编译器后x12和x13的位值?
- javascript - VueJs - 带有多选复选框和带有值的文本字段的选项数组
- javascript - 使用应用程序脚本在数组中具有唯一的名称集,没有空白表名称
- python - 1D CNN 模型的 Tensor Sequential 模型接收到的维度错误
- ios - 为什么我的视图没有更新我发布的变量?
- python - 删除 '',''' 之后的值
- rust - 错误[E0463]:找不到“core”的板条箱/注意:可能未安装“wasm32-unknown-unknown”目标[NEAR 协议]
- python - 将整数转换为一对字节会产生意外的格式?
- c - 用户输入的精确时间
- java - MyBatis oracle 插入新行总是返回错误的主 id 值