2017-04-24 184 views
-1

我一直在试图创建一个变量来保存其他值的值以及要发布的命令。我已经找到了两个sitatuons个人的答案,但我努力把它们放在一起。Bash - 带变量和命令的变量

下面的$ DID和$ SECTOR是已经建立的两个变量。

DATAPARMS=$($DID,$SECTOR,date,uptime | sed 's/^.* up \+\(.\+\), \+[0-9] user.*$/\1/',ls -I README.txt /var/www/html | wc -l,grep "VERSION" /root/config | grep -o '".*"' | sed 's/"//g') 

单个命令(grep,sed等)可以忽略。

我会那么喜欢回声称之为:

echo "$DATAPARMS" 

就如何更好地做到这一点的任何指针?非常感谢你!

+2

参见[BashFAQ#50](http://mywiki.wooledge.org/BashFAQ/050)(“我想在一个变量把一个命令,但复杂的情况总是失败!“) –

+0

Bash变量不允许嵌套结构 - 数组内部不能有数组。试图用bash来完成复杂的结构化数据将成为一个问题。 – Barmar

回答

1

BashFAQ #50所述,不应使用变量来存储代码。使用函数来代替,如下所示:

getDataParams() { 
    echo "$DID,$SECTOR,date,uptime" | sed 's/^.* up \+\(.\+\), \+[0-9] user.*$/\1/' 
    ls -I README.txt /var/www/html | wc -l 
    grep "VERSION" /root/config  | grep -o '".*"' | sed 's/"//g' 
} 

getDataParams 
+0

关于如何将sed应用到“正常运行时间”并将所有内容保留在1行内的任何建议? – t988GF

+0

'foo(){uptime | sed'...'; }' - 关于将函数定义全部放在同一行上的唯一值得注意的事情是,您需要结束在关闭“}”之前的任何命令(如使用';'或'&'),否则它会被解析为论据。 –

+1

这就是说,作为一项规则,我建议不要使用单线 - 清晰度通常比简洁更有价值。 –