2016-08-17 36 views
0

以下代碼:在殼使用破折號的函數定義

#!/bin/bash 

function me-test() 
{ 
     echo 'test' 
} 

me-test 

下面的執行方法是不正確的:

#sh 1.sh 
1.sh: line 6: `me-test': not a valid identifier 

但低於執行方法是正確的:

#./1.sh 
test 

在其他編程語言中,它不能使用破折號來定義函數。例如,python。

爲什麼shell是這樣的?

+1

另外,'function'語法不是標準的,並且可能不適用於所有posix兼容的shell。 – rici

回答

0

sh 1.sh運行腳本作爲Bourne Shell腳本並運行./1.sh它作爲bash腳本,因爲您的線路#!/bin/bash(這被稱爲shebang它告訴shell用哪個解釋)調用的bash解釋器來運行該腳本。 bash允許在函數名稱中使用連字符,但Bourne Shell不會。這兩者非常相似但是不同的編程語言。

如果您將#!/bin/bash更改爲#!/bin/sh,則每次運行程序時都會出現錯誤。

+0

我知道,我想知道爲什麼「bash」可以和「sh」不能 – baozailove

+1

^^因爲它們是不同的。 – anishsane

+0

@anishsane是正確的。 – Mike