bash数组eval和带单引号和双引号的echo

时间:2015-01-28 00:52:34

标签: bash

我需要编写一个脚本来输出XML文件的第一行,如下所示:

<?xml version="1.0" >

并回显相应的命令。 换句话说,我想要相当于这个:

mike@remote:#echo \<?xml version=\"1.0\" \> > file.xml
mike@remote:#cat file.xml
<?xml version="1.0" >
mike@remote:# 

下面是我的脚本,但我无法使其正常工作。我确实需要使用数组,因为我稍后会添加几个命令。

#!/bin/bash
COMMAND1='echo \<?xml version=\"1.0\" \> > file.xml'

ARRAY=("$COMMAND1")
for COMMAND in ${ARRAY[@]}; do
        eval $COMMAND
        echo "$COMMAND"
done

有人知道如何解决这个问题吗?

谢谢,

2 个答案:

答案 0 :(得分:0)

这应该是这样的:

#!/bin/bash
COMMAND1='echo \<?xml version=\"1.0\"\> > file.xml'

ARRAY=("$COMMAND1")
for COMMAND in "${ARRAY[@]}"; do
        eval "$COMMAND"
        echo "$COMMAND"
done

这将创建file.xml文件并生成以下输出:

echo \<?xml version=\"1.0\"\> > file.xml

运行脚本后,我运行cat file.xml,输出为:

<?xml version="1.0">

答案 1 :(得分:0)

如何使用tee?既然你说你有很多命令,那么他们都去了file.xml吗?不太确定你想要什么(也许你可能想澄清它)但是这里有一个例子:

#!/bin/bash

STRING1='<?xml version="1.0">'

> file.xml
ARRAY=("$STRING1")
for STRING in "${ARRAY[@]}"; do
        echo "$STRING" | tee -a file.xml
done

tee -a继续打印到控制台,同时将输出附加到file.xml。