[英]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.