/ bin/sh:奇数字符串比较错误'意外操作员'

 刁琼婉 发布于 2022-12-21 12:47

发现这个错误非常奇怪,因为之前我的脚本正在运行,但是当我从服务器移动它后,我正在使用我的本地机器,它停止工作,只是给了我一个'意外的操作员'错误.

# Else if the script is being run in the arrayscripts directory, add /output/ ...
elif [ $basePath == "arrayscripts" ];
then
        echo "$dscr has started to run."
        cpuPath="`pwd`/output/cpu.binary"
        txtPath="`pwd`/output/cpu.txt"
        csvPath="`pwd`/output/cpu.csv"

Charles Duff.. 10

如果你的实际shell是/bin/sh[与初始问题相反,但正如讨论评论所阐明的那样],请使用=而不是==在测试表达式中:

elif [ "$basePath" = arrayscripts ]

需要注意的是,右侧没有需要在这种情况下被引用,因为它不包含任何的扩张和没有语法敏感字符.


或者,如果在使用bash时此问题是可重现的,那么显而易见的问题是缺少引号.

使用其中之一

[ "$basePath" = arrayscripts ] # this is POSIX compatible

要么

[[ $basePath = arrayscripts ]] # this works only with bash

否则,$basePath扩展的参数数量是未定义的 - 它可以扩展为零参数,从而生成语句

[ = arrayscripts ]

...它会尝试=用作一元运算符,但它不是......

或者,如果$basePath包含,"true -o bar ="它可以扩展成类似的东西

[ true -o bar = arrayscripts ]

...导致程序行为与您实际想要的非常不同.


底线:当编写遵循POSIX规则的shell(基本上,除了zsh或fish之外的任何东西)时,引用您的扩展,除非您有特定且令人信服的理由不这样做.(使用bash/ksh扩展[[ ]]提供了这样一个原因,通过引入一个上下文,其中不会发生扩展结果和全局扩展的字符串拆分).

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有