我有一个环境变量
net_connect="@oradb"
所以我试图将该值存储在另一个没有@ character
的环境变量中这样做似乎有效:
echo "test=" $net_connect | cut -d "@" -f2
test=oradb
现在,如果我这样做,我得到:
SID=`$net_connect | cut -d "@" -f2`
echo "SID=" $SID
SID=
为什么我的输出空白?
答案 0 :(得分:4)
要删除@
,请使用前缀删除:
$ net_connect="@oradb"
$ sid="${net_connect#@}"
$ echo "$sid"
oradb
注意:
通常,${variable#prefix}
会从prefix
中删除全局variable
。有关详情,请打开man bash
并搜索Remove matching prefix pattern
在shell中,最好使用混合或小写来命名变量。如果你使用大写变量名,那么最终你会意外地覆盖系统的一个变量,结果会令人不愉快。
以下命令不能满足您的期望:
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`
代替。