LINUX.ORG.RU

можно ли передать в скрипт все аргументы одной строкой?

 ,


0

3

допустим, скрипт типа такого

mplayer $1
и подаем туда foo bar.mp4 он будет захватывать только первое слово до пробела. Кавычки, по-моему тоже не помогают. Но если бы и помогали, это не особо удобно. Есть ли способ захватить всю строку целиком?



Последнее исправление: portquest2016 (всего исправлений: 2)

посмотри на $@ и $*

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

спасибо. просто оказалось:)

А вот и нет. Это "$*" ведет себя просто, а "$@" совершенно не так, как вы подумали:

`@'
     ($@) Expands to the positional parameters, starting from one.
     When the expansion occurs within double quotes, each parameter
     expands to a separate word.  That is, `"$@"' is equivalent to
     `"$1" "$2" ...'.  If the double-quoted expansion occurs within a
     word, the expansion of the first parameter is joined with the
     beginning part of the original word, and the expansion of the last
     parameter is joined with the last part of the original word.  When
     there are no positional parameters, `"$@"' and `$@' expand to
     nothing (i.e., they are removed).

(info "(bash) Special Parameters")

Так что на будущее рекомендую прочитать инструкцию прежде, чем что-то начинать делать.

Zmicier ★★★★★
()

При mplayer foo bar.mp4 он будет захватывать все аргументы, но mplayer это понимает как команду проигрывания списка из файлов foo и bar.mp4

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

В скриптоте аргументы скопом передавать редко когда надо, зато часто надо вырвать нужный, что в такой конструкции делается элементарно:

${@[2]}
${@/some/${var[6]}}
${@%%$(prog)}
r3lgar ★★★★★
()

Попробуй применить Модель Акторов.

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

Не воспроизводится

$ ls foo bar.mp4 
ls: cannot access 'foo': No such file or directory
ls: cannot access 'bar.mp4': No such file or directory
$ ls foo\ bar.mp4 
'foo bar.mp4'

С mplayer аналогично.

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

А, да, забыл, что вначале надо это дело сделать арраем. Пофиг, уже не могу редактировать свой коммент. :3

r3lgar ★★★★★
()
Ответ на: комментарий от portquest2016
$ touch foo\ bar.mp4
$ echo 'ls "$@"' > test.sh
$ sh test.sh foo bar.mp4
ls: невозможно получить доступ к 'foo': Нет такого файла или каталога
ls: невозможно получить доступ к 'bar.mp4': Нет такого файла или каталога
$ sh test.sh foo\ bar.mp4
foo bar.mp4
ashot ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.