All streams
Search
Write a publication
Pull to refresh
1
0
Send message

Приведите примеры не нормальности синтаксиса Bash.

Когда сравниваете Bash и PowerShell учитывайте, что Bash был выпущен в 1989 году и он следует стандарту IEEE POSIX Shell and Tools, а PowerShell вышел 2006 году.

Синтаксис простой:

if test-commands; then
    consequent-commands;
else alternate-consequents;
fi

Еще раз напомню, Bash - это командный интерпретатор.

test-commands - любая команда: внешняя, внутрення. Если тестовая команда завершилась удачно (Exit Status = 0), то выполняем команду после then, если тестовая команда завершилась с ошибкой (Exit Sttaux ≠ 0), то выполняем команду после else. Это простой вариант, более точный синтаксис смотрите в man bash.

Пример

DWN=~/Downloads
if ls ${DWN} &>/dev/null ; then
xdg-open "${DWN}/$(ls -t -F -1 ${DWN} | grep -v '/$' | head -1)" 2>/dev/null
else echo "No such file or directory: $DWN" ;
fi

В этом примере тестовой командой является ls. Хотя это плохой пример, потому что существование пути лучше проверять встроенной командой [ или составной командой [[. Но пример показывает, что для if используется команда как условие и он анализирует статус её завершения.

Синтаксис типа if [ $number -ge n ] then fi можно придумать либо если ты кукухой едешь в дурку, либо если хочешь поиздеваться над людьми.

Вы забыли, что Bash это командный интерпретатор, а не язык программирования общего назначения и в нем нет True и False.

В приведённом примере [ это не часть синтаксиса, а вполне обычная команда, такая же как cd, pwd, alias и другие встроенные команды, просто у неё имя такое. Оставшаяся часть$number -ge n ] это аргументы команды.

Конечно еще нужно не забывать, что перед тем как выполнить команду [ Bash вместо $number подставит значение переменной с именем number.

Работает именно так как описано в разделе "Word Splitting" в мануале от Bash. Не замечал проблем с этим механизмом.

Прошу обратить внимание, что проблемы не в Linux, а в Bash. PowerShell можно установить в Linux и назначить его как основной интерпретатор пользователя.

Иногда вместо файла может быть каталог с последним изменением, но с этим можно поработать.

xdg-open ~/Downloads/"$(ls -1 -F -t ~/Downloads/ | grep -v '/$' | head -1)" 2>/dev/null

2

Information

Rating
Does not participate
Registered
Activity