2013-12-16 126 views
1

我有一個shell腳本類似運行Bourne shell腳本

#!/bin/sh 

. ./.profile 
echo "sample" 

和.profile文件具有

export variable = xyz 

當我運行該腳本,我得到一個錯誤說

variable = xyz不是標識符

我知道這是因爲.profile中的同行輸出。

有沒有辦法讓它運行?我不應該將sh更改爲bash或ksh,並且不能更改.profile文件,因爲它包含多行同行導出。

+1

你的'export'是錯誤的,使用'export varibale =「xyz」'。 – fedorqui

回答

5

在shell腳本中,spaces are not allowed in variable assignment

您只需要使用:

export variable=xyz 
+0

ok ... export variable = xyz ....但問題是我不應該改變sh到bash或ksh,並且不能改變.profile文件,因爲它有很多與同一行導出的行.....是一種不會出現錯誤的方法 – user3108179

2

如果你有一個真正的Bourne shell,那麼你必須把它分成兩個操作:

variable=xyz 
export variable 

然而,這些炮彈的數量接近於到現在爲止這些日子一直很小 - 但直到最近(至少在最近五年內),Solaris上的/bin/sh足夠像Bourne-shell一樣需要雙命令操作。

Korn shell,POSIX shells和Bash都支持單命令導出和分配操作。

顯示的行有問題 - 分配操作符周圍不能有空格。你們聲稱自己採寫:

export varibale = xyz 

你應該寫:

export varibale=xyz 

但是,該錯誤消息將沿着線:

-bash: export: `=': not a valid identifier 

投訴應該是=不是一個標識符,不是variable = xyz不是一個有效的標識符。我有點懷疑你所引用的內容不是100%準確的。正如你所看到的,那是從bash開始的,但我希望Bourne shell也是如此。如果你寫:

$ export 'variable = xyz' 
-bash: export: `variable = xyz': not a valid identifier 
$ 

然後你得到你要求的消息,但我不得不圍繞導出的'價值'添加引號。

+0

samplefile:variable = xyz:不是標識符...這是我得到的確切錯誤 – user3108179

+0

沒有空格,它強烈地表明你有一個_real_ Bourne shell,並且必須使用在我的答案的第一部分中描述的單獨的分配和導出符號。你在哪個平臺上運行? –

+0

是否有一種方法可以避免將其寫入兩行不同的行...我正在unix平臺上工作 – user3108179