Bad substitution 奇怪的问题

        记得之前写过一篇文章是关于shell 脚本的,这里,当时的系统是 CentOS 的,最近公司把所有的服务器系统都更换为 Ubuntu 了,

结果以前写的那个脚本无法执行了,错误就是 Bad substitution,网上搜索基本都是 {} 和 () 误用导致的,但我这个脚本没有用错,最后是发现 sh 不同版本的区别,CentOS 默认用的应该是 bash,而 Ubuntu 用的是 dash。

#!/bin/bash

if [ $# != 1 ]; then
    echo "Usage: $0 dir"
    exit
fi

dir=$1

#取第一个参数的最后一个字符,由于tab自动补全会带有"/",而下面的函数里路径已经添加了"/"
lastChar=${1:0-1} 
echo $lastChar

if [ "/" == "${lastChar}" ]; then
    len=${#1} #第一个参数的长度
    dir=${1:0:len-1} #不要最后的"/"
    echo ${dir}
fi

function changeEncode()
{
    for fileName in `ls $1`
    do
        if [ -d $1/${fileName} ]; then
            echo -e "\033[33mentry $1/${fileName}\033[0m"
            changeEncode $1/${fileName}  #递归调用,继续把子目录作为参数来调用函数
        else
            file $1/${fileName} | xargs | grep -n "UTF-8"
            if [ $? -eq 0 ]; then
                iconv -f UTF-8 -t GB2312 $1/${fileName} -o $1/${fileName}
            fi
        fi
    done
}

changeEncode ${dir}

最后看了一下,sh 是指向 dash 的符号链接:

此时搜索 dash 和 bash 的区别会发现,Debian 和 Ubuntu 用的就是 dash,这两个的语法还是有很大区别的,这里不讨论了,脚本不修改的情况下,直接用 /bin/bash 来执行了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值