Linux 将文件中的行拆分为变量(接受空格)BASH

Linux 将文件中的行拆分为变量(接受空格)BASH,linux,bash,dialog,Linux,Bash,Dialog,我需要bash中的一个脚本来读取文件并识别分隔符(;”),并将分隔符之间的值存储到变量中,以便稍后构建对话框菜单 我所做的: #!/bin/bash file="Tarefas.cfg" nomeTarefa='' dirOrigem='' dirDest='' tipoBkp='' agendarBkp='' compactarBkp='' gerarLog='' echo for linha in $(cat $file) do nomeTarefa=$(echo $linha |

我需要bash中的一个脚本来读取文件并识别分隔符(;”),并将分隔符之间的值存储到变量中,以便稍后构建对话框菜单

我所做的:

#!/bin/bash
file="Tarefas.cfg"
nomeTarefa=''
dirOrigem=''
dirDest=''
tipoBkp=''
agendarBkp=''
compactarBkp=''
gerarLog=''
echo
for linha in $(cat $file)
do
    nomeTarefa=$(echo $linha | cut -d\; -f1 )
    dirOrigem=$(echo $linha | cut -d\; -f2 )
    dirDest=$(echo $linha | cut -d\; -f3 )
    tipoBkp=$(echo $linha | cut -d\; -f4 )
    agendarBkp=$(echo $linha | cut -d\; -f5 )
    compactarBkp=$(echo $linha | cut -d\; -f6 )
    gerarLog=$(echo $linha | cut -d\; -f7 )
    echo "$nomeTarefa $dirOrigem $dirDest $tipoBkp $agendarBkp $compactarBkp $gerarLog"
    echo
done
它读取的文件是:

Minha Tarefa;/home/;/home/;Diferencial;;N;S;
Minha Tarefa;/home/thalesg;/home/;Diferencial;;N;S;
以及输出:

Minha Minha Minha Minha Minha Minha Minha

Tarefa /home/ /home/ Diferencial  N S

Minha Minha Minha Minha Minha Minha Minha

Tarefa /home/thalesg /home/ Diferencial  N S

使用
while
可以在一次调用中将一行拆分为许多变量。
您需要将字段SEP(IFS)临时更改为

并避免额外调用
cat
:不要使用
cat$file |
,而是使用

file="Tarefas.cfg"
while IFS=";" read nomeTarefa dirOrigem dirDest tipoBkp agendarBkp compactarBkp gerarLog; do
   echo "$nomeTarefa $dirOrigem $dirDest $tipoBkp $agendarBkp $compactarBkp $gerarLog"
   echo "Show one field, the compactarBkp: $compactarBkp"
done < $file
file=“Tarefas.cfg”
而IFS=“;”则读取nomeTarefa dirOrigem dirDest tipoBkp agendarBkp compactarBkp gerarLog;做
echo“$nomeTarefa$dirOrigem$dirDest$tipoBkp$agendarBkp$compactarBkp$gerarLog”
echo“显示一个字段,compactarBkp:$compactarBkp”
完成<$file

使用
while
可以在一次调用中将一行拆分为许多变量。
您需要将字段SEP(IFS)临时更改为

并避免额外调用
cat
:不要使用
cat$file |
,而是使用

file="Tarefas.cfg"
while IFS=";" read nomeTarefa dirOrigem dirDest tipoBkp agendarBkp compactarBkp gerarLog; do
   echo "$nomeTarefa $dirOrigem $dirDest $tipoBkp $agendarBkp $compactarBkp $gerarLog"
   echo "Show one field, the compactarBkp: $compactarBkp"
done < $file
file=“Tarefas.cfg”
而IFS=“;”则读取nomeTarefa dirOrigem dirDest tipoBkp agendarBkp compactarBkp gerarLog;做
echo“$nomeTarefa$dirOrigem$dirDest$tipoBkp$agendarBkp$compactarBkp$gerarLog”
echo“显示一个字段,compactarBkp:$compactarBkp”
完成<$file

使用
while
可以在一次调用中将一行拆分为许多变量。
您需要将字段SEP(IFS)临时更改为

并避免额外调用
cat
:不要使用
cat$file |
,而是使用

file="Tarefas.cfg"
while IFS=";" read nomeTarefa dirOrigem dirDest tipoBkp agendarBkp compactarBkp gerarLog; do
   echo "$nomeTarefa $dirOrigem $dirDest $tipoBkp $agendarBkp $compactarBkp $gerarLog"
   echo "Show one field, the compactarBkp: $compactarBkp"
done < $file
file=“Tarefas.cfg”
而IFS=“;”则读取nomeTarefa dirOrigem dirDest tipoBkp agendarBkp compactarBkp gerarLog;做
echo“$nomeTarefa$dirOrigem$dirDest$tipoBkp$agendarBkp$compactarBkp$gerarLog”
echo“显示一个字段,compactarBkp:$compactarBkp”
完成<$file

使用
while
可以在一次调用中将一行拆分为许多变量。
您需要将字段SEP(IFS)临时更改为

并避免额外调用
cat
:不要使用
cat$file |
,而是使用

file="Tarefas.cfg"
while IFS=";" read nomeTarefa dirOrigem dirDest tipoBkp agendarBkp compactarBkp gerarLog; do
   echo "$nomeTarefa $dirOrigem $dirDest $tipoBkp $agendarBkp $compactarBkp $gerarLog"
   echo "Show one field, the compactarBkp: $compactarBkp"
done < $file
file=“Tarefas.cfg”
而IFS=“;”则读取nomeTarefa dirOrigem dirDest tipoBkp agendarBkp compactarBkp gerarLog;做
echo“$nomeTarefa$dirOrigem$dirDest$tipoBkp$agendarBkp$compactarBkp$gerarLog”
echo“显示一个字段,compactarBkp:$compactarBkp”
完成<$file

非常感谢您,先生---编辑---当我尝试使用另一个包含更多行的文件时,它没有显示最后一行,你知道为什么吗?找到了解决方案!在后面添加了| |[[-n“$line”]]gerarLog@Tiaurls如果您需要,那么您的文件不会以换行符结尾。通常,您只需要在选择备用分隔符(如
\0
,带
-d'
)时使用该分隔符即可。@Etan Reisner实际上,我使用echo vars>>Tarefas.cfg我不知道如何使用该分隔符创建新行,无论如何,谢谢@你用什么<代码>回显
默认情况下在打印内容的末尾添加一个换行符。因此,如果您只使用了
echo
来编写配置文件,那么它的结尾应该有一个换行符。非常感谢您,先生---编辑---当我尝试使用另一个包含更多行的文件时,它没有显示最后一行,你知道为什么吗?找到了解决方案!在后面添加了| |[[-n“$line”]]gerarLog@Tiaurls如果您需要,那么您的文件不会以换行符结尾。通常,您只需要在选择备用分隔符(如
\0
,带
-d'
)时使用该分隔符即可。@Etan Reisner实际上,我使用echo vars>>Tarefas.cfg我不知道如何使用该分隔符创建新行,无论如何,谢谢@你用什么<代码>回显
默认情况下在打印内容的末尾添加一个换行符。因此,如果您只使用了
echo
来编写配置文件,那么它的结尾应该有一个换行符。非常感谢您,先生---编辑---当我尝试使用另一个包含更多行的文件时,它没有显示最后一行,你知道为什么吗?找到了解决方案!在后面添加了| |[[-n“$line”]]gerarLog@Tiaurls如果您需要,那么您的文件不会以换行符结尾。通常,您只需要在选择备用分隔符(如
\0
,带
-d'
)时使用该分隔符即可。@Etan Reisner实际上,我使用echo vars>>Tarefas.cfg我不知道如何使用该分隔符创建新行,无论如何,谢谢@你用什么<代码>回显
默认情况下在打印内容的末尾添加一个换行符。因此,如果您只使用了
echo
来编写配置文件,那么它的结尾应该有一个换行符。非常感谢您,先生---编辑---当我尝试使用另一个包含更多行的文件时,它没有显示最后一行,你知道为什么吗?找到了解决方案!在后面添加了| |[[-n“$line”]]gerarLog@Tiaurls如果您需要,那么您的文件不会以换行符结尾。通常,您只需要在选择备用分隔符(如
\0
,带
-d'
)时使用该分隔符即可。@Etan Reisner实际上,我使用echo vars>>Tarefas.cfg我不知道如何使用该分隔符创建新行,无论如何,谢谢@你用什么<代码>回显
默认情况下在打印内容的末尾添加一个换行符。因此,如果您只使用了
echo
来编写配置文件,那么它的末尾应该有一个换行符。