unix shell脚本语法问题?

时间:2016-07-25 20:42:15

标签: shell unix scripting

我有一个环境变量

net_connect="@oradb"

所以我试图将该值存储在另一个没有@ character

的环境变量中

这样做似乎有效:

echo "test=" $net_connect | cut -d "@" -f2
test=oradb

现在,如果我这样做,我得到:

SID=`$net_connect | cut -d "@" -f2`
echo "SID=" $SID
SID=

为什么我的输出空白?

2 个答案:

答案 0 :(得分:4)

要删除@,请使用前缀删除

$ net_connect="@oradb"
$ sid="${net_connect#@}"
$ echo "$sid"
oradb

注意:

  1. 通常,${variable#prefix}会从prefix中删除全局variable。有关详情,请打开man bash并搜索Remove matching prefix pattern

  2. 在shell中,最好使用混合或小写来命名变量。如果你使用大写变量名,那么最终你会意外地覆盖系统的一个变量,结果会令人不愉快。

  3. 以下命令不能满足您的期望:

    SID=`$net_connect | cut -d "@" -f2`
    

    它运行命令$net_connect并将其标准输出发送到cut。但是,可能没有这样的命令,shell会发出错误,例如:

    bash: @oradb: command not found
    

    如果你真的想使用cut,那么:

    sid=$(echo "$net_connect" | cut -d "@" -f2)  # This works but prefix removal is simpler
    

答案 1 :(得分:2)

因为您正在执行变量,而不是回显变量:

$net_connect | etc...

归结为

@oradb | etc...

这是一个语法错误。您没有名为@oradb的命令/二进制文件。

也许你想要

SID=`echo $net_connect | cut -d "@" -f2`

代替。