我正在尝试编写一个脚本,该脚本将读取文本文件,然后执行以&#34开头的每一行;运行"或" chk"作为一个命令。这就是我到目前为止所做的:
#!/bin/bash
counter=1
for i in $@
do
while read -r line
do
if [[ ${line:0:4} == "run " ]]
then
echo "Now running line $counter"
${line:4:${#line}}
elif [[ ${line:0:4} == "chk " ]]
then
echo "Now checking line $counter"
${line:4:${#line}}
elif [[ ${line:0:2} == "# " ]]
then
echo "Line $counter is a comment"
else
echo "Line $counter: '$line' is an invalid line"
fi
counter=$((counter+1))
done<$i
done
然而,当我用例如命令
提供文本文件时run echo > temp.txt
它实际上并没有创建一个名为temp.txt的文件,它只是回应&#34;&gt; TEMP.TXT&#34;回到stdout。当我尝试做类似
之类的事情时,它也会做类似的事情run program arguments > filename.txt
它没有按照我的意愿将程序的输出放在一个文件中,而是试图对待&#39;&gt;&#39;作为文件名。
我知道这是一个超级特定的,可能是显而易见的事情,但我对bash和所有shell脚本都很新。
由于
答案 0 :(得分:1)
您需要使用v(2:n-1) = 0.5 * (v(1:n-2) + v(3:n))
来对变量执行所有正常的shell解析:
eval
您也不需要eval "${line:4}"
。如果省略长度,则默认为字符串的其余部分。