Форум программистов, компьютерный форум, киберфорум
Shell, Bash
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
2 / 2 / 2
Регистрация: 16.09.2013
Сообщений: 42
1

Почему в данном коде не срабатывает присвоение

17.07.2017, 09:40. Просмотров 903. Ответов 4
Метки нет (Все метки)

Всем привет, подскажите пожалуйста почему в данном коде не срабатывает присвоение
Bash
1
shouldStartChecks=true
и на экран всегда выводиться false?
Bash
1
2
3
4
5
6
7
8
9
10
shouldStartChecks=false
 
git diff --cached --name-status | while read st file; do
        if [ "$st" == 'D' ]; then continue; fi      
        if [[ "$file"=~".ts$" ]] || [[ "$file"=~".tsx$" ]]; then
            shouldStartChecks=true
        fi
        done
        
echo $shouldStartChecks
Не судите строго, в баше я полный 0
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.07.2017, 09:40
Ответы с готовыми решениями:

Почему в данном случае срабатывает неявный конструктор
Почему в данном случае срабатывает неявный конструктор, хотя он и помечен explicit? Main.cpp: ...

Почему не меняется bool в данном коде?
void input( bool &name_win, bool &step, string name1, string name2, char charr ) { mylabel:...

Почему выводится такая ошибка в данном коде
procedure TForm1.Button2Click(Sender: TObject); begin With...

Значение this в данном коде ?
var Person = { greeting: function(name,age,gender){ this.name = name; this.age = age;...

4
Модератор
Эксперт NIX
2639 / 1984 / 666
Регистрация: 02.03.2015
Сообщений: 6,366
17.07.2017, 10:12 2
Лучший ответ Сообщение было отмечено Marinero как решение

Решение

Проблема в том, что команды после конвейера («|») выполняются в субшелле, т.е. область видимости переменных только вызванный субшелл — обратно в корневой они не передаются.
Bash
3
4
5
6
7
while read st file; do
        if [ "$st" != D ] && [[ "$file"=~ .ts(|x)$ ]]; then
            shouldStartChecks=true
        fi
done < <(git diff --cached --name-status)
Bash
3
4
5
if git diff --cached --name-status | grep -qxm 1 '\s*[^D]\s.*\.tsx\?\s*' ; then
    shouldStartChecks=true
fi
1
2 / 2 / 2
Регистрация: 16.09.2013
Сообщений: 42
17.07.2017, 14:02  [ТС] 3
Marinero, спасибо за подсказку. Немного переделал Ваш ответ, чтобы не падало ошибок (возможно потому что работаю на винде)
Bash
1
2
3
4
5
6
7
shouldStartChecks=false
while read st file; do
        if [ "$st" == 'D' ]; then continue; fi
        if [[ "$file"=~".ts$" ]] || [[ "$file"=~".tsx$" ]]; then
            shouldStartChecks=true
       fi
done << `git diff --cached --name-status`
но результат всё тот же
0
1 / 1 / 1
Регистрация: 15.05.2013
Сообщений: 46
18.07.2017, 10:12 4
Версия bash должна быть не ниже 3. Там появился спец оператор =~ для работы с регуляркой.
Bash
1
echo $BASH_VERSION
И код
Bash
1
2
3
4
5
6
7
shouldStartChecks=false
while read st file; do
        if [ $st == "D" ]; then continue; fi
        if [[ $file =~ ".ts" || $file =~ ".tsx" ]]; then
            shouldStartChecks=true
       fi
done < `git diff --cached --name-status`
Важно наличие пробелов между квадратными скобками и условием.
А вообще для начала заставь скрипт выводить проверяемые данные, а потом уже будешь что то парсить. Да, к сожалению пошагового отладчика у баша нет....
0
Модератор
Эксперт NIX
2639 / 1984 / 666
Регистрация: 02.03.2015
Сообщений: 6,366
18.07.2017, 11:52 5
Прежде чем «корячить» чужой код, неплохо бы разобраться что и почему там сделано… Для начала хотя бы разницу между $(…) и <(…)
Цитата Сообщение от JFF_by Посмотреть сообщение
чтобы не падало ошибок
Достаточно не набирать код в Виндовом блокноте, потому как в Вин и Лин разные переводы строк… И вообще принято показывать ошибки.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.07.2017, 11:52

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

В данном коде сделать замыкания
Здравствуйте! function cycl (interval, time) { for (i = 0; i&lt;li.length; i++) { if...

Нужно объяснение в данном коде
Добрый день! echo off set fl=test set papka=c:\test D:\3.bat D:\1 D:\2\1\ for %%i in...

Что делает (->) в данном коде
TInfo Info; TElem *Elem = new TElem; Elem-&gt;Info.Ball = Info.Ball; Не нашел...

В чем ошибка в данном коде
Здравствуйте, подскажите, пожалуйста, в чем ошибка в данном коде. Компилятор почему-то ругается на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.