В земле Unix, 0 - это истина, а 1 - это ложь.
Для вашего первого примера:
if [ 1 ]
then
echo "Yes"
else
echo "No"
fi
«If» проверяет код выхода данной команды на true / false (т. Е. Ноль / не ноль).
Квадратные скобки фактически вызывают команду «test» (см. «Man test» для получения дополнительной информации) и присваивают код выхода if.
«test 1» (или действительно «test any_string») возвращает true (0), поэтому выводится «Yes».
Для вашего второго примера выводится «Нет», поскольку «nuxi» не найден в «Linux», если вы измените «nuxi» на «nux» (возможно, это была опечатка?) И удалите пробелы вокруг = тогда вы получите поведение, которое вы ожидаете. например,
word=Linux
letter=nux
if echo "$word" | grep -q "$letter"
then
echo "Yes"
else
echo "No"
fi