我想创建 69 个文件,文件名从 4006 到 7075,每个文件都需要有一些枚举内容,以下代码在 shell 上打印我想要插入到各个文件中的内容,但我该如何执行此操作?
#!/bin/bash
for i in `seq 4006 4075`; do
echo "vid $i\nports 524288\nactive = 1 >vlan_$i.ini"
done
我尝试将引号之间的部分放入`(反引号)中,但随后我只得到空文件。
答案1
如果要重定向echo
命令的输出,重定向运算符>
需要位于任何引号之外。双引号之间的字符>
代表其本身。
默认情况下,在 bash 中,echo
不扩展反斜杠序列。您需要将-e
选项传递给echo
,使用xpg_echo
来设置 shell 选项shopt
,或者使用printf
来代替echo
。
for i in `seq 4006 4075`; do
printf "vid %s\nports %d\nactive = 1\n" "$i" 524288 1 >"vlan_$i.ini"
done
A这里的文档是一种更易读的方式来表示多行字符串。由于它作为输入而不是作为命令行参数传递,因此请使用cat
而不是echo
.请注意,如果文本缩进,则会复制缩进(您可以使用<<-EOF
代替来避免缩进,<<EOF
但只能使用制表符缩进,而不能使用空格)。
for i in `seq 4006 4075`; do
cat <<EOF >"vlan_$i.ini"
vid $i
ports 524288
active = 1
EOF
done