我试图对来自cat命令的每一行执行一个命令。 我基于从供应商获取的示例代码。
这是脚本:
for tbl in 'cat /tmp/tables'
do
echo $tbl
done
所以我期望的输出是文件中的每一行。但实际上我得到了这个:
cat
/tmp/tables
显然这不是我想要的。
我将用一个实际的命令替换echo,这个命令可以与数据库进行交互。
如果有帮助把这个问题搞清楚将不胜感激。
你使用的是错误类型的引号。
你需要使用反引号而不是单引号来使参数成为一个运行程序并将内容管道传输到for循环的命令。
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"
你可以通过重新定义IFS(输入字段分隔符)在bash中进行许多解析操作,例如
IFS="\t\n" # You must use double quotes for escape sequences.
for tbl in `cat /tmp/tables`
do
echo "$tbl"
done
"\t\n"
。否则,单引号将会保留 ''、't'、'n'的本意。 - Anthony Rutledge