在循环结束后使用for循环中的变量

时间:2015-05-07 15:08:43

标签: bash for-loop awk while-loop

我已经删除了旧问题,希望这个简化且更精确的版本能够正常运行。

我有一个文件:

#Works Command
cd /tmp
mkdir folder
echo "it worked" >file
cat file

#Not working Command
cd /tmp
mkdir file
echo "it didn't work" >wrong
cat wrong

可以有少至1个命令分组和多达20个分组,但每个命令分组都以一个以"命令"

结尾的注释为前缀

我希望完成的是将每个注释设置为一个变量,当被调用时将执行命令。

如果我回显$ var1

,则需要的结果
cd /tmp
mkdir folder
echo "it worked" >file
cat file

我尝试过使用:

while read -r line; do var+=("$line"); done < <(awk '/Command/,/Command/' file)

要将注释设置为变量,但我还没有为命令分组找到可行的解决方案。

我尝试过使用:

for i in {1..5}
do
awk '/'"${var[$i]}"'/,/'"${var[$i+1]}"'/' file |egrep -vi "${var[$i]}|${var[$i+1]}"
done

希望这有助于澄清事情。我很抱歉发布了一个问题而没有明确的需要做什么。

1 个答案:

答案 0 :(得分:0)

你的更新问题听起来像是你需要非常小心的东西但是在这里(我更改了示例输入,因为我不想在/tmp中创建文件时搞错!):< / p>

$ cat file
#First Command
echo 'here is the date'
date +'%D'

#Second Command
echo 'here is the time'
date +'%T'              

$ IFS=$'\n' var=( $(awk -v RS= -v FS='\n' -v OFS=';' '{for (i=2;i<=NF;i++) printf "%s%s", $i, (i<NF?OFS:ORS)}' file) )

$ echo "${var[0]}"
echo 'here is the date';date +'%D'

$ echo "${var[1]}"
echo 'here is the time';date +'%T'

$ eval "${var[0]}"          
here is the date
05/07/15

$ eval "${var[1]}"
here is the time
11:42:51

您可以决定evaldeclare或其他是否是执行命令的正确方法。