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

带单引号和双引号的bash数组eval和echo,bash,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:# 下面是我的脚本,但我无法让它工作。我确实需要使用数组,因为我以后添

我需要编写一个脚本,输出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
有人知道怎么解决这个问题吗


谢谢,

它应该是这样的:

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

ARRAY=("$COMMAND1")
for COMMAND in "${ARRAY[@]}"; do
        eval "$COMMAND"
        echo "$COMMAND"
done
运行脚本后,我运行cat file.xml,输出为:

<?xml version="1.0">
用T恤怎么样?既然你说你有很多命令,它们都是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的同时,继续打印到控制台。

您需要引用数组扩展以防止分词。您的问题描述与脚本不匹配。请精确输入和期望输出是什么。具体地说:您的输入是xml文件,还是echo\听起来很模糊
#!/bin/bash

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

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