Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: Срипт + смещение переменной  (Прочитано 429 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн articc

  • Автор темы
  • Новичок
  • *
  • Сообщений: 13
    • Просмотр профиля
Срипт + смещение переменной
« : 08 Март 2012, 00:13:38 »
Странная вещь происходит, если в терминале выполнить
a=123456 && echo ${a:1}то получаю:
23456, что в принципе и ожидаю.

Если выполнить скрипт, следующего содержания:
#!/bin/bash
a=123456 && echo ${a:1}
exit
то получаю
2: Bad substitution

Как я понимаю вся беда в ${a:1}, но в чем разница между командой выполненной в терминале после ввода с клавиатуры и той же командой в скрипте?

Оффлайн ArcFi

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 15194
    • Просмотр профиля
    • aetera.net
Re: Срипт + смещение переменной
« Ответ #1 : 08 Март 2012, 00:30:20 »
Цитировать
$ a=123456 && echo ${a:1}
23456

$ ./1.sh
23456

$ cat 1.sh
#!/bin/bash
a=123456 && echo ${a:1}
exit

$ bash --version
GNU bash, version 4.2.20(1)-release (x86_64-redhat-linux-gnu)
...
В бунте опять сломали bash?

Смотрите, что там в реале вызывается:
ls -l $(which bash)
Сравнивайте вывод в интерактивном и неинтерактивном режимах:
shopt
echo $0
echo $BASH_VERSION

Оффлайн articc

  • Автор темы
  • Новичок
  • *
  • Сообщений: 13
    • Просмотр профиля
Re: Срипт + смещение переменной
« Ответ #2 : 08 Март 2012, 01:02:17 »
В Дебиан этаже фигня.
shopt
(Нажмите, чтобы показать/скрыть)

echo $0
bash
ls -l $(which bash)
-rwxr-xr-x 1 root root 950896 2011-05-18 14:00 /bin/bash


Оффлайн ArcFi

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 15194
    • Просмотр профиля
    • aetera.net
Re: Срипт + смещение переменной
« Ответ #3 : 08 Март 2012, 01:17:42 »
Сравнивайте вывод в интерактивном и неинтерактивном режимах
Я имею ввиду, надо искать отличия, когда руками запускаете, и когда оно выполняется в скрипте.

andrey_p

  • Гость
Re: Срипт + смещение переменной
« Ответ #4 : 08 Март 2012, 05:44:34 »
Скрипт исполняется не башем, а /bin/sh. Почему? Ну попробую телепатию, запускается откуда-то (редактор, наутилус, IDE), а не из терминала. В сообщении об ошибке должно быть первым имя скрипта - его не дано.

Оффлайн articc

  • Автор темы
  • Новичок
  • *
  • Сообщений: 13
    • Просмотр профиля
Re: Срипт + смещение переменной
« Ответ #5 : 08 Март 2012, 08:32:16 »
Скрипт исполняется не башем, а /bin/sh. Почему?
Привычка из OpenSUSE. Она то и подвела. Делал sh 1.sh, а нужно ./1.sh или bash 1.sh.
Получается, что при запуске оболочки через sh читаются одни конфиги, а через bash другие.
« Последнее редактирование: 08 Март 2012, 09:07:20 от articc »

Оффлайн ArcFi

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 15194
    • Просмотр профиля
    • aetera.net
Re: Срипт + смещение переменной
« Ответ #6 : 08 Март 2012, 11:45:04 »
Получается, что при запуске оболочки через sh читаются одни конфиги, а через bash другие.
Даже больше... Это вообще разные интерпретаторы.

(Нажмите, чтобы показать/скрыть)

Оффлайн articc

  • Автор темы
  • Новичок
  • *
  • Сообщений: 13
    • Просмотр профиля
Re: Срипт + смещение переменной
« Ответ #7 : 08 Март 2012, 14:12:55 »
Разве это не линк?
ls -al /bin/

lrwxrwxrwx  1 root root       4 2012-01-03 22:51 sh -> dash


Оффлайн ArcFi

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 15194
    • Просмотр профиля
    • aetera.net
Re: Срипт + смещение переменной
« Ответ #8 : 08 Март 2012, 14:42:15 »
articc, в общем случае sh, bash и dash являются разными интерпретаторами.
В некоторых версиях некоторых дистрибутивов они могут быть слинкованы друг на друга.

 

Страница сгенерирована за 0.058 секунд. Запросов: 24.