2010-12-11 61 views
28

在Bash中輸入變量時,declaretypeset之間有什麼區別?在函數內部使用時:declaretypesetlocal之間的區別是什麼?Bash中聲明,排版和局部變量之間的區別

我遇到的唯一區別是排版對於ksh腳本是可移植的。除此之外,有沒有什麼理由爲什麼一個人應該比另一個更受歡迎?

更新:增加local的問題。

+0

類似於[這個問題](http://stackoverflow.com/q/30362831/471376)。 – JamesThomasMoon1979 2015-06-06 03:27:00

回答

8

就bash而言,不,沒有區別。事實上,聯機幫助頁他們共享同一個定義

聲明[-aAfFilrtux] [-p] [名稱[=值] ...]
排版 [-aAfFilrtux] [-p] [名稱[=值] ...]
聲明變量和/或 給它們屬性。如果沒有給出名稱 ,則顯示 變量的值。 -p選項將顯示每個 名 屬性和值...

我還發現this little tidbit這進一步證實了我的要求,以及你所提到的ksh便攜性。

的聲明或排版建宏, 其是精確同義詞,允許修改的變量的屬性。 這是在某些編程 語言中可用的打字 [1]的非常弱形式。聲明命令 特定於版本2或更高版本 Bash。排版命令也可以在ksh腳本中使用 。

+8

「幫助排版」告訴我,它已經過時了。棄用贊成「申報」。 – lecodesportif 2010-12-12 00:23:32

+0

這是bash文檔中存在的問題的一個很好的例子,它與命令行幫助(使用'help'命令)和手冊頁(使用'man bash'並轉到SHELL BUILTINS)和內置頁面使用'man builtins')。這裏也有一些拼寫錯誤,所以請注意 – osirisgothra 2013-10-20 05:42:55

3

在根據第4.2 Bash Builtin Commands Bash的手冊它指出:

'排版'
排版[-afFrxi] [-p] [NAME [= VALUE] ...]
的'排版'命令是爲了與Korn 外殼兼容而提供的;然而,它已被棄用,以支持內部命令'聲明' 。 typesetdeclare之間

15
  • 差異:

前者更便攜式(例如KSH),而後者則是更優選的當可移植性是不是一個問題。函數內使用時declare(或typeset)和local之間

  • 差異:

前者意味着後者,但更強大。例如,declare -i x使得x具有integer屬性,declare -r x使得x只讀等

+12

'local'和'declare'大部分是相同的,並且採用所有相同的參數,但有兩個例外:如果函數內部沒有使用local,則會失敗,並且本地沒有args過濾器輸出到只打印當地人,聲明不。 – ormaaj 2012-04-18 04:02:06

+0

@ormaaj你是對的,我沒有意識到'local'也支持選項。非常感謝。 – 2012-04-18 05:28:00

相關問題