運作shell腳本經常碰到這個坑,但是又不知道是怎麼回事,總是懷疑bash版本是不是支援[[ 用法。
1.檢查bash版本。
bash --vserion
GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu)
想來基本不是版本問題。
2.[[ 使用錯誤。
在互動模式下使用:
|
顯然這樣用是可以的。
3.那到底是哪裡出了問題呢?
使用方式來講,一般使用 sh XX.sh 或者 ./XX.sh ,嘗試一下./ 執行,果然成功。那問題的結症找到,
但是互動和腳本之間的差距在于#!/bin/bash——指定環境變量。那具體是什麼原因呢?
|
原來是ubuntu 的sh指向的dash、并不是環境變量指定的bash,是以說./ 是可以的。sh 方式執行不行,那麼顯而易見的是 bash XX.SH 也可以但是我們并不會經常用的。
4. 接下去的問題就是dash 和 bash 有什麼差別?
網上查了一下,ubuntu在6.10版本以後把系統預設的shell 改成了dash ,來自官方:dash(the Debian Almquist shell)是一個比bash小很多但仍相容POSIX标準的shell,它占用的磁盤空間更少,執行shell腳本比bash更快,依賴的庫檔案更少,當然,在功能上無法與bash相比。dash來自于NetBSD版本的Almquist Shell(ash)。Ubuntu中将預設shell改為dash的主要原因是效率。由于Ubuntu啟動過程中需要啟動大量的shell腳本,為了優化啟動速度和資源使用情況,Ubuntu做了這樣的改動。
5.将dash修改為bash的方法。
sudo dpkg-reconfigure dash