• Linux shell Bash posix Объясните почему посикс шелл на этом сосет хуйцы:
    ~ % cat 1
    #!/bin/bash
    echo ${@-foo}
    for i in "$@"; do
    echo "bar"
    done
    ~ % ./1
    foo
    ~ % cat 2
    #!/bin/sh
    echo ${@-foo}
    for i in "$@"; do
    echo "bar"
    done
    ~ % ./2

    Почему баш корректно считает переменную аргумента неопределенной и не запускает луп, а так же выводит заместо неопределенной переменной заданное 'foo', а каноничный шелл делает непонятное — для первой команды он считает переменную определенной (но пустой) и выводит ее значение, но луп в то же время не запускает, как будто она не определена?

Replies (1)

  • @smeea, в мане позиксного шелла вобще нет такого выражения, как ${parameter-word}, есть ${parameter:-word}. Почему баш считает верным вариант без двоеточия я не знаю, но позиксный шелл совершенно правильно игнорирует незнакомую конструкцию.