Сжать инструкцию if в одну строку в bash

#bash #shell

#bash #оболочка

Вопрос:

У меня есть следующий скрипт:

 #!/usr/bin/bash
arch=`uname -p`
if [[ "$arch" == "x86_64" ]]
then
    echo "Yes"
else
    echo "No"
fi
  

Есть ли способ записать это в виде короткой однострочной строки в командной строке, $ вместо того, чтобы использовать это как скрипт. Что-то вроде:

 $ test uname -p == "x86_64" ? "Yes" : "No"
  

Хотя я не уверен в троичном использовании (?) в bash.

Комментарии:

1. В арифметических контекстах есть тернарный оператор.

2. @BenjaminW. Верно, но это может выдавать только числовые результаты, а не строки типа «Да» и «Нет».

Ответ №1:

Вы могли бы использовать следующее, где amp;amp; часть выполнялась бы, если инструкция принимает значение True , и || выполнялась бы run в противном случае:

 [ "`uname -p`" = "x86_64" ] amp;amp; echo "Yes" ||  echo "No"
  

Комментарии:

1. Я бы рекомендовал "$(uname -p)" использовать эквивалент обратных ссылок, но, возможно, более читаемый..

2. @DavidC.Rankin — спасибо, это в основном для удобства чтения, или в этом есть и другие преимущества?

3. Вот и все, удобочитаемость и меньшая подверженность ошибкам для новичков в написании сценариев.

4. Это также создает новый контекст цитирования, в то время как обратные ссылки этого не делают.

5. Кроме того, это не совсем эквивалентно, потому что, если вторая инструкция завершается ошибкой, выполняется третья, см. Bash Pitfall 22 .