2015-11-12 3 views
-1

Команда:Как понять этот «Баш» командная оболочка

[ -d $x ] && echo $x | grep "${1:-.*}" 

Я запустить его отдельно, и [ -d $x ] && echo $x просто выведет имя каталога. Что означает ${1:-.*}?

+1

, что оболочка, которая будет Хель pful, так как bash, c shell и т. д. все запускают команды по-разному. – jgr208

+0

bash shell on Centos – Tong

+3

Это [Shell Parameter Expansion] (http://www.gnu.org/software/bash/manual/bashref.html#Shell-Parameter- Расширение). Вы можете найти его в руководстве. –

ответ

0

В скрипте, на который вы ссылаетесь, вызывается grep. Его первый аргумент, который будет искать , является либо первым параметром скрипта $1, если был указан один , либо .*, что соответствует чему угодно, если параметры не заданы.

"$1" или "${1}" в сценарии bash заменен первым аргументом , с которым был вызван сценарий. Иногда необходимо немного обработать эту строку , что можно сделать с расширением параметра оболочки, так как Этан Рейснер с благодарностью указал. :- - один из таких инструментов; есть несколько других.

"${1:-.*}" означает «если параметр-не установлен или нулевой (то есть, нет таких параметра не был задан), а затем заменить часть после того, как :, в этом случае, .*

Пример скрипт pe:.

#!/bin/bash 
printf 'parameter count = %d\n' $# 
printf 'parameter 1 is "%s"\n' "$1" 
printf 'parameter 1 is "%s"\n' "${1:-(not given)}" 

Выход:

$ ./pe 'foo bar' 
parameter count = 1 
parameter 1 is "foo bar" 
parameter 1 is "foo bar" 

$ ./pe 
parameter count = 0 
parameter 1 is "" 
parameter 1 is "(not given)" 
Смежные вопросы