#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 .