Одинарна дужка в призначенні змінної bash


11

Мені було цікаво про окремі дужки в bash. Я знаю, що вони використовуються для виконання команд у підрозділах і що вони використовуються для створення масивів, але чи використовуються вони для чого-небудь іншого?

Одне, що привернуло мою увагу, це те, що коли ви використовуєте присвоєння змінної, наприклад

var=(hello)
echo $var    # hello

bash не створює помилки чи нічого, а вихід такий же, як якщо б

var=hello

Чи однакові ці змінні визначення чи однакові?

Відповіді:


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; }
  • Список шаблон в Glob: ?(), *(), +(), @(), !()( тільки якщо extglobє включити )

1
Правильно, я насправді про це не думав. Але так var=(1 2 3); echo $varце як var=(1 2 3); echo ${var[0]}?
Маттіас

Так, результат в bashтому ж.
jimmij

Чи потрібно нам ""в echo "${a}"?
nn0p

@ nn0p Так, якщо ми не хочемо виконувати спліт та глобальну операцію a. Розглянемо, наприклад a=*, спробуйте echo $aі echo "$a".
jimmij
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.