在Bash中将文本文件保存到变量中

8
如何在bash中读取文本文件并将其保存到变量中?我的代码如下:
#!/bin/bash
TEXT="dummy"
echo "Please, enter your project name"
read PROJECT_NAME  
mkdir $PROJECT_NAME  
cp -r -f /home/reza/Templates/Template\ Project/* $PROJECT_NAME  
cd $PROJECT_NAME/Latest  
TEXT = `cat configure.ac `  ## problem is here   !!!  
CHANGED_TEXT=${TEXT//ProjectName/$PROJECT_NAME}
echo $CHANGED_TEXT

可能是重复的问题:使用Shell脚本读取文件并将其保存在变量中 - Ciro Santilli OurBigBook.com
3个回答

17
问题在于你有一个额外的空格。在使用赋值运算符=时,不应该有任何空格。然而,在bash中可以使用以下方式:
TEXT=$(<configure.ac)

你还需要确保引用变量以保留换行符。

CHANGED_TEXT="${TEXT//ProjectName/$PROJECT_NAME}"
echo "$CHANGED_TEXT"

它能工作,但有一个问题:行丢失了。所有字符都变成了一行,就像这样,我该怎么办? - reza
1
@reza,你是否像我提到的那样引用了你的变量? - SiegeX

5

尝试

TEXT=`cat configure.ac`

那应该可以运行。

编辑:

澄清一下,区别在于空格:在TEXT后面加一个空格会导致bash尝试将其作为命令查找。


2

如果你想在bash脚本中执行一个命令并将结果保存到一个变量中,你需要将命令放在$()内,并将整个表达式赋值给变量。例如:

var=$(command)

注意,var、'='和$()之间不能有空格。

TEXT=$('cat configure.ac')

现在,echo $TEXT 通过文件 configure.ac 返回内容。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接