Bash, якщо на одному рядку


51

Мені хотілося б знати, як я можу записати, якщо умови в баш-скрипті в одному рядку.

Наприклад, як я можу записати це в один рядок, а потім поставити ще один, як це на наступному?

if [ -f "/usr/bin/wine" ]; then
    export WINEARCH=win32
fi

Я запитую це, тому що у мене є досить багато псевдонімів у моєму .bashrc, і я однаковий .bashrc (синхронізований) у багатьох системах, але мені не потрібні всі псевдоніми для кожної системи. Я розміщую більшість з них всередині висловлювань, і все це прекрасно працює зараз, але вони займають багато місця, по 3 рядки кожен плюс порожній рядок між ними (мені подобається, щоб вони були легко видно)

Я також буду використовувати цю техніку для змінних середовища.


4
Можна також написати[ -f "/usr/bin/wine" ] && export WINEARCH=win32
glenn jackman

3
Майте на увазі, що коротше не обов’язково краще. Ви можете отримати тонкі логічні помилки за допомогою логічних операторів оболонки. Виберіть те, що простіше читати та підтримувати.
Гленн Джекман

Відповіді:


84

Ви б написали це як таке:

if [ -f "/usr/bin/wine" ]; then export WINEARCH=win32; fi

Зауважте, що це також можна написати (як це запропонував @glennjackman):

[ -f "/usr/bin/wine" ] && export WINEARCH=win32

1
Ну, це було легко ... :) Зараз я відчуваю себе незручно про це запитувати. Дякую за відповідь Тхо, це дуже допомогло!
Horațiu Mlendea

7
Є одна відмінність. 1. Вираз вийде з 0 статусом, 2. Вираз вийде з статусом non 0, якщо файл не існує. Це може мати значення, якщо ви використовуєте це в деяких автоматизованих завданнях, таких як розгортання, де успіх завдання залежить від стану виходу команди.
Яніс Грузіс

@ HorațiuMlendea очевидно, що це було легко. якщо ви знаєте, як. Але синтаксис хитро напр. [1 == 1] - помилка, але [1 == 1] працює. І напівколони. Як ти можеш почувати себе ніяково за те, що не знаєш певно погано розробленого синтаксису. Ваше "почуття" взагалі не має сенсу. Це було корисним питанням, навіть якщо, на жаль, ви не розумієте, чому.
барлоп

@balop ні, я повністю бачу, що ти маєш на увазі, і я згоден. Просто тоді я зрозумів окремі біти, які складали цей синтаксис (той, який &&). Зазвичай складати речі разом легко та інтуїтивно, але, як ви сказали, ця мова є досить химерною та не дуже інтуїтивно зрозумілою.
Horațiu Mlendea

4

Я також вважаю, що просто набравши будь-яку складну команду if if else, натисніть клавішу enter, а потім після її виконання просто натисніть стрілку вгору. Командний рядок буде повторювати останню набрану команду звичайно, але в цьому випадку вона розміщує все це в одному рядку, як вам потрібно. Це обман, але це ефективно.


5
Зауважте, що це може залежати від вашої оболонки (і, можливо, надалі від налаштувань вашої оболонки). Деякі швидкі тестування на моєму комп’ютері показують, що це працює в Bash (тому є +1), але Zsh зберігає розриви рядків при поверненні до попередніх команд.
8bittree
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.