2

Я столкнулся с этим загадочным фрагментом кода, который, как мне кажется, содержит некоторую форму расширения переменных.

echo "Usage: ${0##*/} [-f] [-u user] [--] "

Знак доллара, сопровождаемый строкой в скобках, эквивалентен переменной bash $ 0? Если так, то зачем использовать первое, а не второе? Спасибо за любое просвещение.

2 ответа2

3

${variable} - это расширение обычного параметра. Скобки можно использовать для разделения имени переменной при развертывании в середине другой строки. Например, если вы хотите расширить $variablefoo , оболочка не сможет узнать, где заканчивается имя переменной. Вместо этого, используя ${variable}foo , оболочка точно знает, что вы имеете в виду.

Скобки также позволяют выполнять различные другие операции во время расширения. Ваш пример выше удаляет то, что совпадает выражение, слева. Если задана строка, такая как путь /a/b/c , она вернет c . Это фактически эквивалентно тому, что делает basename , но расширение параметров может быть более удобным и читаемым в некоторых ситуациях.

Существуют различные основные строковые операции, которые могут быть выполнены с расширением параметра. Будучи встроенной операцией, они обычно работают лучше, чем sed или awk при выполнении простых задач.

Если вы занимаетесь написанием сценариев оболочки, я советую вам прочитать это руководство на вики bash hackers.

2

Он использует расширение параметра, чтобы убрать каталог из $0 .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .