反引号声明中的变量

时间:2012-01-09 18:27:50

标签: sh

我遇到了这个问题,我无法理解。

FILE_PROPERTIES="info.txt"

echo `grep "ENVOI_MAIL=" ${FILE_PROPERTIES} | cut -d "=" -f "2"`

第二行中的我的FILE_PROPERTIES没有像我期望的那样改变,并且在文件中找不到异常。 有人知道那是为什么吗?

或者,以更一般的方式,如何在``语句中调用变量,以便将其转换为输出?我试过没有{},没有任何运气。

1 个答案:

答案 0 :(得分:1)

你这样做的方式应该有效。例如,以下内容应该(尝试)访问info.txtsomething_else.txt。请注意,两个echo命令是相同的。

#!/bin/sh

FILE_PROPERTIES="info.txt"
echo `grep "ENVOI_MAIL=" ${FILE_PROPERTIES} | cut -d "=" -f "2"`

FILE_PROPERTIES="something_else.txt"
echo `grep "ENVOI_MAIL=" ${FILE_PROPERTIES} | cut -d "=" -f "2"`

一个可能的问题是,如果文件名包含空格,它将在grep命令中显示为两个参数。您可以通过使用引号来避免这种情况(无论如何都不是一个坏主意)。 (在这种情况下不需要括号,但也有不错的主意。)

echo `grep "ENVOI_MAIL=" "${FILE_PROPERTIES}" | cut -d "=" -f "2"`

此外,大多数现代shell支持$(...)语法,它比反引号形式更好(一方面,它可以嵌套):

echo $(grep "ENVOI_MAIL=" "${FILE_PROPERTIES}" | cut -d "=" -f "2")

最后,echo可能没有必要,除非您确实需要echo处理空白区域。您可以尝试这样做:

grep "ENVOI_MAIL=" "${FILE_PROPERTIES}" | cut -d "=" -f "2"

(我还没有测试过所有这些命令,所以请注意拼写错误。)