2012-01-09 46 views
0

我有这个问题,我无法得到我的头。反向语句中的变量

FILE_PROPERTIES="info.txt" 

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

我在第二行FILE_PROPERTIES不会改变像我希望它,并在文件完成没找到例外。 有人会知道这是为什么吗?

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

+0

什么环境中,这是什么? “批处理”标记用于Windows批处理文件,但这看起来不像Windows批处理语法。 – 2012-01-09 18:38:46

+0

@CheranShunmugavel谢谢!错了,我更新了标签。 – y2k 2012-01-09 19:51:40

+1

适用于此(bash 4.1.10)。可能依赖于shell的类型和可能的版本。 'export FILE_PROPERTIES =“info.txt”'工作吗? – 2012-01-09 20:23:26

回答

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"` 

而且,最现代的炮弹支持$(...)语法比反引号形式更好一点(的一两件事,它可以被嵌套):

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

最后,echo可能是没有必要,除非你确实需要echo的治疗的空白。你可能会改为试试这个:

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

(我没有测试所有这些命令,所以,要当心拼写错误。)

+0

感谢您提供清晰,详尽且翔实的答案!帮助我理解发生了什么。现在正在批量生产0403-010。 – y2k 2012-01-18 16:38:04