我正在尝试为来自 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
单引号应该是反引号:
for tbl in `cat /etc/tables`
虽然,这不会让您按行输出/输入,而是按单词输出/输入。要逐行处理,您应该尝试以下操作:
cat /etc/tables | while read line
echo $line
done
使用while循环:
while read line
do
echo "$line"
done < "file"
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