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

geo*_*son 10 linux bash for-loop cat

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

这是脚本:

for tbl in 'cat /tmp/tables'
do
   echo $tbl
done
Run Code Online (Sandbox Code Playgroud)

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

cat
/tmp/tables
Run Code Online (Sandbox Code Playgroud)

这显然不是我想要的.

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

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

Sor*_*ren 19

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

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

for tbl in `cat /tmp/tables` 
do 
    echo "$tbl"
done
Run Code Online (Sandbox Code Playgroud)

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

for tbl in $(cat /tmp/tables) 
do 
    echo "$tbl"
done
Run Code Online (Sandbox Code Playgroud)

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

cat /tmp/tables | xargs -L1 echo
Run Code Online (Sandbox Code Playgroud)

或作为循环

cat /tmp/tables | while read line; do echo "$line"; done
Run Code Online (Sandbox Code Playgroud)


Dan*_*her 5

单引号应该是反引号:

for tbl in `cat /etc/tables`
Run Code Online (Sandbox Code Playgroud)

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

cat /etc/tables | while read line
    echo $line
done
Run Code Online (Sandbox Code Playgroud)