Передача аргументов в shell-скрипте

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Ответить
Аватара пользователя
boogie
Сообщения: 21
ОС: Archlinux

Передача аргументов в shell-скрипте

Сообщение boogie »

Господа, столкнулся со следующей проблемой:
допустим, есть вот такое:

Код: Выделить всё

#!/bin/sh
echo $1

И мы ему скармливаем в качестве аргумента "$1$MfWXWN.X$LqNJQSvdBk9y5GS5rslUk0". А на выходе получаем:

Код: Выделить всё

boogie@armory:~$ ./_pwadd $1$MfWXWN.X$LqNJQSvdBk9y5GS5rslUk0
.X

Понятно, что знаки "$" в аргументе сбивают интерпретатор с толку, и он пытается показать их как переменные. Вопрос - как заставить sh передавать жесткое значение аргумента? Кавычки и printf изучены, пробовались, толку - ноль. При этом аргумент должен передаваться без кавычек - это жесткое условие.
"We all know Linux is great…it does infinite loops in 5 seconds." © Linus Torvalds
Спасибо сказали:
Аватара пользователя
Liksys
Сообщения: 2910

Re: Передача аргументов в shell-скрипте

Сообщение Liksys »

Если только экранировать бекслешем, но лучше использовать одинарные кавычки
Спасибо сказали:
Аватара пользователя
boogie
Сообщения: 21
ОС: Archlinux

Re: Передача аргументов в shell-скрипте

Сообщение boogie »

Liksys, в том-то и дело, что одно из условий - аргумент должен передаваться в оригинальном виде.
"We all know Linux is great…it does infinite loops in 5 seconds." © Linus Torvalds
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian
Контактная информация:

Re: Передача аргументов в shell-скрипте

Сообщение diesel »

boogie_byte писал(а):
24.10.2007 20:36
При этом аргумент должен передаваться без кавычек - это жесткое условие.

это как раз неправильное условие. поскольку замена происходит не внутри скрипта, а при передаче аргумента:

Код: Выделить всё

diesel@beezir:~$ cat test.sh
#!/bin/bash
echo $1
diesel@beezir:~$ bash test.sh '$1$MfWXWN.X$LqNJQSvdBk9y5GS5rslUk0'
$1$MfWXWN.X$LqNJQSvdBk9y5GS5rslUk0
diesel@beezir:~$ bash test.sh $1$MfWXWN.X$LqNJQSvdBk9y5GS5rslUk0
.X

Или вот так:
diesel@beezir:~$ ./test.sh \$1\$MfWXWN.X\$LqNJQSvdBk9y5GS5rslUk0
$1$MfWXWN.X$LqNJQSvdBk9y5GS5rslUk0
Спасибо сказали:
Аватара пользователя
boogie
Сообщения: 21
ОС: Archlinux

Re: Передача аргументов в shell-скрипте

Сообщение boogie »

Я знаю, что эта задача не имеет решения, я хочу понять как ее решать!

Понятно, что шелл ошибается при еще при передаче аргумента, но неужели с такой проблемой никто не сталкивался и не было найдено решения?
"We all know Linux is great…it does infinite loops in 5 seconds." © Linus Torvalds
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian
Контактная информация:

Re: Передача аргументов в shell-скрипте

Сообщение diesel »

boogie_byte писал(а):
24.10.2007 20:49
Liksys, в том-то и дело, что одно из условий - аргумент должен передаваться в оригинальном виде.

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

boogie_byte писал(а):
24.10.2007 20:54
Я знаю, что эта задача не имеет решения, я хочу понять как ее решать!

:)

полные условия задачи давай. обходные решения найти можно. "в лоб" - нельзя
Спасибо сказали:
Аватара пользователя
boogie
Сообщения: 21
ОС: Archlinux

Re: Передача аргументов в shell-скрипте

Сообщение boogie »

В общем, и целом, буду забирать значение через read, видимо... Такая реализация тоже возможна, просто не так удобна. Ладно, все равно спасибо! Хоть буду точно уверен в том, что это не мой косяк :)
"We all know Linux is great…it does infinite loops in 5 seconds." © Linus Torvalds
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU
Контактная информация:

Re: Передача аргументов в shell-скрипте

Сообщение sash-kan »

boogie_byte писал(а):
24.10.2007 20:54
Понятно, что шелл ошибается
спасибо, посмеялся (:
любой шелл — это вообще глючная вещь. нафига всякие там переменные придумали? вот без переменных было бы классно!
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
sergio
Сообщения: 436
Статус: Интересующийся новичок
ОС: Debian GNU/Linux 4 & 5

Re: Передача аргументов в shell-скрипте

Сообщение sergio »

sash-kan писал(а):
26.10.2007 19:45
любой шелл — это вообще глючная вещь.


Кстати, хорошо сказано. :happy:
Дюжина разных скобок и кавычек с дюжиной разных "зарезервированных" символов и подстановок, хуча невидимых автоматических переменных, пяток разных, но оч похожих при этом форматов регекспов в разных программах и с разными ключами, даже ницасная звездочка, которая у одних прог включает скрытые файлы, у других не включает, у третьих в манах написано, что с такой-то версии поведение изменилось для совместимости с неведомо-чем. :crazy:
Тут есть с чего новичку начать искать глюки. :happy:
Debian GNU/Linux 4 -- AMD Athlon64 3000+ / Asus 7600GS -- Gnome
Debian GNU/Linux 5 -- Dell (Vostro) 500 (Celeron M560 / iGM965) -- Gnome
Спасибо сказали:
Ответить