LINUX.ORG.RU

sh - передать два параметра или ничего

 


1

1

Если переменная iso что-то содержит, нужно передать два параметра команде: -cdrom $iso, если же она ничего не содержит, то не нужно передавать ни одного параметра.

Если не думать про пробелы в $iso, то решение простое:

if [ -z "$iso" ]
  params=
else
  params="-cdrom $iso"
fi
qemu $params

но если в $iso будут пробелы, то передастся фигня.

Хочется, чтобы работало без башизмов. С башизмами вроде можно через массив сделать.

★★★★★

getopts тебе в помощь

beastie ★★★★★
()
Ответ на: комментарий от cpio

Да.

Почитайте внимательно задачу, предлагаемое решение, сделайте тест со своей заменой и убедитесь, что делов то на минуту, зато бы не позорились.

vodz ★★★★★
()
Ответ на: комментарий от cpio

Такой способ передаст параметр с содержанием «пустая строка». Это не то же самое, что вообще не передать параметр (и то, что я хотел избежать).

Сравни cat "$test" и cat ${test:+"$test"} когда test не задан или пуст.

Legioner ★★★★★
() автор топика
Последнее исправление: Legioner (всего исправлений: 2)
Ответ на: комментарий от Legioner

Я для примера к subshell’у с echo двойные кавычки прилепил. В твоём случае двойные кавычки конечно же не нужны :)

cpio
()
Ответ на: комментарий от cpio

И кто теперь опозорился?

Ну до чего упертый тупой баран...

$ v="a b"
$ ls "$v"  && echo Ok
ls: cannot access 'a b': No such file or directory
$ x= # echo without iso file
$ ls ${x:+"$v"} && echo Ok
Ok
$ x=isofile.iso
$ ls ${x:+"$v"} && echo Ok
ls: cannot access 'a b': No such file or directory
vodz ★★★★★
()
Ответ на: комментарий от NK

Это передаст во втором параметре в приложение символы кавычек. И не раскроет $iso.

Legioner ★★★★★
() автор топика
Последнее исправление: Legioner (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.