2016-10-04 2 views
0

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

#!/bin/csh 

set echo 

grep -n -m 1 "HR${4}" Tossed/length${1}/TL${1}D2R${2}-${3}TT.txt | cut -d : -f 1 

To_Start=$((grep -n -m 1 "HR${4}" Tossed/length${1}/TL${1}D2R${2}-${3}TT.txt | cut -d : -f 1)) 

Это выход:

[[email protected] Tenengolts_Generate]$ ./flow_LBBH.sh 7 0 0 0 
grep --color=auto -n -m 1 HR0 Tossed/length7/TL7D2R0-0TT.txt 
cut -d : -f 1 
1       #This is the right number 
Illegal variable name.  #why is this not working? 

Из того, что я прочитал, прописные буквы, строчные буквы и символы подчеркивания допустимы в Баш имена переменных, так что я делаю неправильно?

+0

Одна проблема: 'set echo' очищает все аргументы, которые вы передаете на свой скрипт, и устанавливая' $ 1' в строку 'echo'. Не очевидно, что вы намерены этой линией. – chepner

+1

Ваш вопрос помечен тегом [tag: bash], и ваш заголовок включает слово «Bash», но ваш скрипт, похоже, использует 'csh'. По крайней мере, это то, что вызывает линия shebang. Не могли бы вы прояснить и исправить либо тег/заголовок, либо shebang, чтобы они были согласованными. – rici

ответ

3

синтаксис $((expr)) используется для вычислений, поэтому путаное сообщение.

например: echo $((4+4)) дает 8

вы хотите, чтобы оценить результат выполнения команды, просто скобка будет делать:

To_Start=$(grep -n -m 1 "HR${4}" Tossed/length${1}/TL${1}D2R${2}-${3}TT.txt | cut -d : -f 1) 

Простой репродуктор, чтобы доказать свою точку зрения:

To_Start=$(echo a:b | cut -d : -f 1) 
echo $To_Start 

урожаи :

a 
+0

Это сработало для вас? (конечно, используя другую строку и файл), я до сих пор не могу заставить его работать :( – Jeff

+0

в некотором смысле: '$ To_Start = $ (grep -n -m 1" HR $ {4} "Tossed/length $ { 1}/TL $ {1} D2R $ {2} - $ {3} TT.txt | cut -d: -f 1) grep: Tossed/length/TLD2R-TT.txt: Нет такого файла или каталога. ' Я добавил отдельный пример, чтобы доказать свою точку зрения. ' –

+0

Это работает. Все работает, когда я печатаю его в командной строке, но это не работает, когда я использую его внутри скрипта ... Что это может означать? И спасибо за вашу помощь до сих пор. – Jeff

0

Я исправил проблему, перейдя с csh на bash, удалив set echo (вызвав некоторую странную проблему, сделав все входные переменные в «echo») и изменив с $ (()) на $().

Смежные вопросы