Что означает «$ 1 / *» в «для файла в $ 1 / *» - PullRequest
6 голосов
/ 08 января 2012

Краткий скрипт bash ниже перечисляет все файлы и каталоги в данном каталоге и его подкаталоге. Что означает $1/* в сценарии? Пожалуйста, дайте мне несколько ссылок об этом. Спасибо

#!/bin/sh

list_alldir(){
    for file in $1/*
    do
        if [ -d $file ]; then
            echo $file
            list_alldir $file
        else
            echo $file
        fi
    done
}   

if [ $# -gt 0 ]; then 
    list_alldir "$1"
else
    list_alldir "."
fi

Ответы [ 3 ]

18 голосов
/ 08 января 2012

Это глобус первого аргумента, рассматриваемого как каталог

В скриптах bash аргументы файла передаются в скрипт как $0 (то есть имя скрипта), затем $1, $2, $3 ... Для доступа ко всем из них вы либо используйте их метку или одну из групповых конструкций. Для групповых конструкций есть $* и $@. ($* рассматривает все аргументы как один блок, где $@ считает их разделенными $IFS)

4 голосов
/ 08 января 2012

$1 означает первый параметр.
for file in $1/* означает цикл с переменной file, имеющей значение имени каждого файла в каталоге, названном в первом параметре.

2 голосов
/ 16 января 2014

$ 1 - первый аргумент командной строки. Если вы запустите ./asdf.sh a b c d e, то $ 1 будет a, $ 2 будет b и т. Д. В оболочках с функциями $ 1 может служить первым параметром функции и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...