繁体   English   中英

在bash脚本循环中打印cat语句的输出

[英]Print output of cat statement in bash script loop

我正在尝试为来自cat命令的每一行执行命令。 我的基础是我从供应商处获得的示例代码。

这是脚本:

for tbl in 'cat /tmp/tables'
do
   echo $tbl
done

所以我期待输出是文件中的每一行。 相反,我得到了这个:

cat
/tmp/tables

这显然不是我想要的。

我将用一个与数据库连接的实际命令替换echo。

任何帮助纠正这一点将不胜感激。

您使用的是错误的报价类型。

您需要使用后引号而不是单引号来使参数成为程序运行并将内容输出到forloop。

for tbl in `cat /tmp/tables` 
do 
    echo "$tbl"
done

另外为了更好的可读性(如果你使用bash),你可以把它写成

for tbl in $(cat /tmp/tables) 
do 
    echo "$tbl"
done

如果你的期望是获得每一行(上面的for循环会给你每个单词),那么你可能最好使用xargs ,就像这样

cat /tmp/tables | xargs -L1 echo

或作为循环

cat /tmp/tables | while read line; do echo "$line"; done

使用while循环:

while read line
do
echo "$line"
done < "file"

单引号应该是反引号:

for tbl in `cat /etc/tables`

虽然,这不会让你按行输出/输入,而是按字。 要逐行处理,您应该尝试以下方法:

cat /etc/tables | while read line
    echo $line
done
while IFS= read -r tbl; do echo "$tbl" ; done < /etc/tables

这个

例如,您可以通过重新定义IFS(输入字段分隔符)在bash中进行大量解析

IFS="\t\n"  # You must use double quotes for escape sequences. 
for tbl in `cat /tmp/tables` 
do 
    echo "$tbl"
done

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM