$1 означает для .... ? без каких-либо входных данных?

$1 означает для .... ? без каких-либо входных данных?

У меня есть одна программа, которая начинается с этой строки. Что это значит? У меня проблемы с поиском в Google из-за знака доллара.

Как так получилось, что $1 без параметров? И что здесь означает -d?

  if [ -d $1 ]; then

И ставится ли точка с запятой, даже если условие if даже не начинается? Я думал, что точка с запятой ставится только в конце оператора или в конце условия, как

   if () {  };

решение1

Точка с запятой обязательна, поскольку без указания того, где заканчивается этот контекст (через точку с запятой, новую строку и т. д.), ifневозможно узнать, где заканчивается условие и начинается условный блок. Сравните:

$ if echo then foo then; then :; fi
then foo then
$ if echo then; then :; fi
then

-dэто тест для проверки, является ли следующий аргумент каталогом. Из help test(потому что testэквивалентно [):

-d FILE        True if file is a directory.

Например:

$ mkdir foo
$ if [ -d foo ]; then
>     echo foo is a dir
> fi
foo is a dir

$1это первый аргумент, переданный вашей программе. Например:

$ cat > script << 'EOF'
> #!/bin/sh  
> echo "$1"
> EOF
$ chmod +x script
$ ./script foo
foo

Кстати, $1здесь следует использовать кавычки, иначе они могут разрастись до нескольких аргументов, что приведет к синтаксической ошибке [:

$ dir="foo bar"
$ [ -d $dir ]
sh: 2: [: foo: unexpected operator
$ [ -d "$dir" ]
$ 

Связанный контент