为什么我在bash字符串相等性测试中遇到意外的操作符错误?

时间:2013-08-07 11:40:07

标签: bash

第四行的错误在哪里?

if [ $bn == README ]; then

如果我把它写成

,我仍然会得到
if [ $bn == README ]
then

if [ "$bn" == "README" ]; then

上下文:

for fi in  /etc/uwsgi/apps-available/* 
do 
        bn=`basename $fi .ini`
        if [ $bn == "README" ]
        then
                echo "~ ***#*** ~"
        else
                echo "## Shortend for convience ##"
        fi
done

2 个答案:

答案 0 :(得分:12)

您不能使用==进行单括号比较([])。使用single =代替。您还必须引用变量以防止扩展。

if [ "$bn" = README ]; then

如果你使用[[]],那可能适用,你不需要引用第一个参数:

if [[ $bn == README ]]; then

答案 1 :(得分:3)

将以下内容添加到脚本的顶部:

#! /bin/bash

在bash中,== is the same作为=在单括号内使用时。然而,这不是便携式的。所以你应该明确告诉shell使用bash作为脚本的解释器,将#! /bin/bash放在脚本的顶部。

或者,使用=进行字符串比较。请注意,==运算符在双括号内使用时的行为与不同比在单括号内部使用>。