如何将bash变量放在引号中

时间:2018-02-19 06:20:39

标签: linux bash

DMIDECODE=$cmd_.dmidecode
UNAME=$cmd_.uname
HOSTNAME=$cmd_.hostname

我想编写一个脚本,可以将这些变量放在目录或其子目录中的所有文件的双引号中。例如:

DMIDECODE="$cmd_.dmidecode"
UNAME="$cmd_.uname"

我是一个初学者,但我已经尝试过各种方法来解决这个问题。我试图为上述变量编写正则表达式,然后将变量值括在双引号中。 我写的正则表达式是 ^(?!.[a-z])(?!.[0-9]).+[=][$].*$ 我记住的事情是变量应该以大写字母开头,后跟=和$符号后跟任何东西。

2 个答案:

答案 0 :(得分:0)

您可以使用sed,如下所示:

sed 's/^\([[:upper:]][[:upper:]_]\{1,\}=\)\(.*\)[[:blank:]]*/\1"\2"/' file.sh

说明:

^            # begin of the line
\(           # start of capturing group 1
[[:upper:]]  # uppercase character
[[:upper:]]  # uppercase or underscore character
\{1,\}       # one or more times
=            # the literal =
\)           # end of capturing group 1
\(.*\)       # capturing group 2 contains the value
[[:blank:]]* # optional white space at the end of the line

答案 1 :(得分:0)

另一个使用反向引用来检查行尾的简单替代方法可能是:

sed -i 's/[=]\([$].*$\)/="\1"/' filename

使用-i选项执行替换。在您的样本文件上调用上述内容的简短测试:

DMIDECODE="$cmd_.dmidecode"
UNAME="$cmd_.uname"
HOSTNAME="$cmd_.hostname"