5

私は、Bash で変数または関数を宣言する方法の決定と常に戦っています。

次の仮定を前提とします。

  1. Bash は、利用可能な唯一のスクリプト言語です。
  2. 命名規則は関係ありません。

グローバル変数の場合、次を使用する必要があります。

  1. foo=bar- 関数の内側と外側?
  2. declare -g foo=bar- 関数の内側と外側?
  3. local -g foo=bar- 関数内?

ローカル変数の場合、次を使用する必要があります。

  1. local foo=bar
  2. declare foo=bar

読み取り専用変数の場合、次を使用する必要があります。

  1. declare -r foo=bar
  2. local -r foo=bar
  3. readonly foo-r-次の行のフラグなしで [1.] または [2.] に続く。

関数の場合、次を使用する必要があります。

  1. foo() { echo bar; }
  2. foo { echo bar; }
  3. function foo() { echo bar; }
  4. function foo { echo bar; }
4

1 に答える 1

2

.bashrcそれを忘れるために、Bash シェル スクリプト ファイルと同様に、各 Bash シェル スクリプト ファイルの上部にも次のように定義します。

# Allow to define an alias.
#
shopt -s expand_aliases

# Defines a function given a name, empty parentheses and a block of commands enclosed in braces.
#
# @param name the name of the function.
# @param parentheses the empty parentheses. (optional)
# @param commands the block of commands enclosed in braces.
# @return 0 on success, n != 0 on failure.
#
alias def=function

# Defines a value, i.e. read-only variable, given options, a name and an assignment of the form =value.
#
# Viable options:
#   * -i - defines an integer value.
#   * -a - defines an array value with integers as keys.
#   * -A - defines an array value with strings as keys.
#
# @param options the options. (optional)
# @param name the name of the value.
# @param assignment the equals sign followed by the value.
# @return 0 on success, n != 0 on failure.
#
alias val="declare -r"

# Defines a variable given options, a name and an assignment of the form =value.
#
# Viable options:
#   * -i - defines an integer variable.
#   * -a - defines an array variable with integers as keys.
#   * -A - defines an array variable with strings as keys.
#
# @param options the options. (optional)
# @param name the name of the variable.
# @param assignment the equals sign followed by the value. (optional)
# @return 0 on success, n != 0 on failure.
#
alias var=declare

# Declares a function as final, i.e. read-only, given a name.
#
# @param name the name of the function.
# @return 0 on success, n != 0 on failure.
#
alias final="readonly -f"

上記の定義により、たとえば次のように言えます。

  1. def foo { echo bar; }.
  2. final foo
  3. var foo=bar
  4. val foo=bar

コメントで示されているようvar -g foo=barに、グローバル (-g) 変数 (var) やval -Ai foobar=([foo]=0 [bar]=1)読み取り専用 (val)、整数 (-i) 値で構成される連想配列 (-A)など、さまざまな変数フラグを組み合わせて一致させることができます。 .

暗黙的な変数のスコープも、このアプローチに付属しています。また、新しく導入されたキーワードdefvalvarおよびfinalは、JavaScript、Java、Scala などの言語でプログラミングを行うソフトウェア エンジニアなら誰でも知っているはずです。

于 2012-11-12T23:42:49.920 に答える