bash変数割り当ての単一括弧


11

bashの単一の括弧について疑問に思っていました。それらはサブシェルでコマンドを実行するために使用され、配列を作成するために使用されることは知っていますが、それ以外のものに使用されますか?

私の注意を引いたのは、変数の代入でinを使用すると、

var=(hello)
echo $var    # hello

bashはエラーなどを生成せず、出力はあたかも同じです

var=hello

これら2つの変数の定義は同じですか、それとも違いがありますか?

回答:


14

あなたのケースでは、括弧()は配列定義として使用されます、例えば

a=(one two three)   # array definition
echo "${a}"         # print first element of array a
echo "${a[0]}"      # print first element of array a
echo "${a[1]}"      # print *second* element of array a
echo "${#a[@]}"     # print number of elements in array a

配列に単一の変数を配置すると、単一の要素を持つ配列になります。


括弧が他にも使用されているかどうかという他の質問に答えるには、他bashの文字と組み合わせて、次のように使用できる多くの状況があります。

  • コマンド置換: $()
  • プロセス置換:<()および>()
  • サブシェル: (command)
  • 算術評価: (())
  • 関数定義: fun () { echo x; }
  • グロブにおけるパターンリスト:?()*()+()@()!()場合にのみ、extglobISは有効

1
そう、私は実際にはそうは思いませんでした。しかし、それvar=(1 2 3); echo $varは同じvar=(1 2 3); echo ${var[0]}ですか?
マティアス

はい、結果bashは同じです。
jimmij

我々は必要ですか""echo "${a}"
nn0p

@ nn0pはい、分割とグロブ操作をで実行したくない場合は行いaます。例えば考えてみa=*てみてください、その後、echo $aecho "$a"
jimmij
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.