Bash:非法变量名称错误

时间:2016-10-04 22:13:48

标签: bash shell grep naming-conventions

我正在尝试使用grep从文本文件中提取字段。我想将行号存储到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))

这是输出:

[maurerj1@rucc-headnode 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?

根据我的阅读,bash变量名中允许使用大写,小写和下划线,那么我做错了什么?

2 个答案:

答案 0 :(得分:2)

$(( 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

答案 1 :(得分:1)

我通过从csh更改为bash,删除set echo(通过将所有输入变量变为“echo”而导致一些奇怪的问题)并从$(()更改为$()来修复此问题。