Подстановка параметров
As we saw in the chapter on variables, you can put braces around a variable name to set it off from its surroundings:
Как мы могли видеть в главе о переменных, фигурные скобки удобно использовать для отделения имени переменной от окружающего текста.
$ curr=myfile $ rm ${curr}.jpeg
There are also some nifty tricks you can perform inside the braces, such as changing parts of the string. Suppose you have a file named mypicture.jpeg instead of myfile.jpeg. You could alter the $curr variable when you insert it into a command:
Но кроме того есть еще несколько замечательных трюков, которыми вы можете воспользоваться внутри фигурных скобок, например замена части строки. Предположим, у вас есть файл с названием mypicture.jpeg вместо myfile.jpeg. Вы можете изменить переменную $curr во время подстановки ее в команду:
$ rm ${curr/file/picture}.jpeg
Playing Safe With Variables That Don't Exist
Безопасная работа с несуществующими переменными
Sometimes you might be using variables that have been removed (which you can do with the unset command) or were never initialized in the first place. Since by default the shell uses an empty string for a nonexistent or undefined variable, as in the case of the rm command we showed earlier, it's useful to be able to substitute a default value for a variable.
Иногда вы можете обратится к переменной, которая уже была удалена (удалить переменную можно командой unset) или вообще еще не была инициализирована. Так как шелл по умолчанию в качестве значения неинициализированной переменной использует пустую строку, как в случае с командой rm в предыдущем примере, то будет ползным задать значение по умолчанию для переменной.
$ cat "${VARIABLE_FILE_NAME:-/home/user/file}"
The ':-' operator asks the shell to check whether the variable is set. to see if it exists and is set to some string. If it was never defined, or has no value, the shell substitutes the text after ':-'.
Оператор ':-' указывает шеллу проверить, задано ли значение переменной. Если переменная не определена или не имеет заданного значения, то шелл подставляет вместо параметра текст, указанный после ':-'.
$ cat "${VARIABLE_FILE_NAME:=/home/user/file}"
The ':=' operator will do much the same, but instead of just substituing '/home/user/file' in the current cat command, if VARIABLE_FILE_NAME doesn't exist, the shell will also set the variable to the alternative text.
Оператор ':=' делает почти то же самое, но кроме подстановки строки '/home/user/file' на место параметра, он еще и создает переменную VARIABLE_FILE_NAME, если она не существует, и задает указанную строку в качестве ее значения.
Cutting Corners With Variable Expansion
Заканчиваем с подстановкой значений
Variable expansion is by no means limited to filenames. It is also a handy way to pass complex, frequently used options to commands.
Подстановка значений совсем не ограничивается именами файлов. Это так же удобный способ передавать командам сложные и часто повторяющиеся опции.
$ export ALT_LS='--color=always -b -h --filetype' $ ls $ALT_LS
Since the alternative options are stored and expanded in variable form, you can use whatever defaults you like for ninety-percent of your work but quickly use an alternative form in special cases.
Благодаря тому, что альтернативные опции хранятся и подстанавливаются при помощи переменных, вы можете использовать параметры по умолчанию в девяноста процентах случаев и в то же время быстро задействовать альтернативные параметры в особых ситуациях.
Parameter expansion is an excellent way to abstractly deal with multiple files or tediously long series of options. Once you understand it, it's bound to expand your abilities on the command line.
Подстановка значений - отличный способ абстрактно работать с множеством файлов или скучных и длинных строк параметров. Если вы освоите этот метод, то он значительно расширит ваши возможности в командной строке.