ubuntu 下通过 sh 命令运行脚本产生如下错误:[: y: unexpected operator
今天同事在打包 deb 時發生了如下錯誤:
[: y: unexpected operator
腳本代碼如下:
read -p " Make Release Version [y/n]:" Y if [ $Y == 'y' ] then#... else#... fi?同事運行腳本的命令為:
sh test.sh如果直接運行腳本(“./test.sh”)則不會有這個問題。經過上網查資料,發現是因為腳本解釋器不同造成的,整理如下:
ubuntu 中,腳本解釋器從系統 6.10 開始默認改為了 dash,而使用 sh 命令執行該腳本就是使用 dash 來執行腳本的。在該解釋器中,變量與字符串判斷是否相同使用的是一個等號,這就造成了上述問題。解決版本就是使用如下命令:
bash ./test.sh即:通過指明解釋器軟件。或者將兩個等號改為一個等號亦可。
問題解決之后,搜索了下 sh 命令,原來其已經被軟連接至 dash 了,如下:
sh -> dash所以用 sh 執行腳本就是用 dash 執行腳本,所以會報錯。 而直接運行腳本則默認使用了 bash,所以能夠執行成功,原因是腳本開頭寫的代碼:
#!/bin/bash這句代碼的含義就是告訴系統,該腳本默認執行的解釋器為 bash 。
再擴展下,bash 解釋器實際上是 Bourne Again shell,它是 Linux 操作系統缺省的 shell,是Bourne shell 的擴展,簡稱 Bash 。
Bourne shell 是 UNIX 最初使用的 shell,并且在每種 UNIX 上都可以使用。
總結:
從時間軸上來說,shell 解釋器發展歷史如下:
Bourne shell
??????? |(增加大量功能)
bash(Bourne Again shell),位置:/bin/bash,使用方法:#! /bin/bash
??????? | (簡化功能)
dash(Debian Almquist Shell),位置:/bin/sh,使用方法:#! /bin/sh
(SAW:Game Over!)
總結
以上是生活随笔為你收集整理的ubuntu 下通过 sh 命令运行脚本产生如下错误:[: y: unexpected operator的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 请实现一个函数,将字符串中的空格替换成“
- 下一篇: CPU 的 ring0、ring1、ri