Конкатенация строк внутри скрипта bash (отличное поведение от оболочки) - PullRequest
0 голосов
/ 04 мая 2011

Я пытаюсь использовать некоторые кадры, которые отлично работают, когда я пишу их в обычной оболочке, но когда я включаю их в файл сценария bash, это не так.Первый пример:

m=`date +%m`
m_1=$((m-1))
echo $m_1

Это дает мне значение прошлого месяца (фактический минус один), но не работает, если его выполнить из скрипта.

Второй пример:

m=6
m=$m"t"
echo m

Это возвращает «6t» в оболочке (объединяет $ m с «t»), но просто дает мне «t» при выполнении из скрипта.

Я предполагаю, что все это может бытьлегко отвечает опытный пользователь Linux, но я просто учусь на ходу.

Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 04 мая 2011

Перепроверьте ваш синтаксис.

Ваш первый фрагмент кода работает либо из командной строки , либо из bash и из sh , так как вашсинтаксис действителен ш.По моему мнению, в вашем файле сценария есть опечатки:

~$ m=`date +%m`; m_1=$((m-1)); echo $m_1
4
~$ cat > foo.sh
m=`date +%m`; m_1=$((m-1)); echo $m_1
^C
~$ bash foo.sh
4
~$ sh foo.sh
4

То же самое можно применить к другому фрагменту с исправлениями:

~$ m=6; m=$m"t"; echo $m
6t
~$ cat > foo.sh
m=6; m=$m"t"; echo $m
^C
~$ bash foo.sh
6t
~$ sh foo.sh
6t
1 голос
/ 04 мая 2011

Убедитесь, что первая строка вашего скрипта

#!/bin/bash

вместо

#!/bin/sh

Bash включит расширенные функции, только если явно запущен как bash. Если он работает как sh, он будет работать в режиме совместимости с POSIX.

0 голосов
/ 04 мая 2011

Во-первых, у меня нормально работает как в скрипте, так и на терминале. Во-вторых, ваша последняя строка echo m будет просто выводить "m". Я думаю, что вы имели в виду "$ m" ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...