我有以下简单的bash脚本,它从stdin获取输入并输出第三行作为输入。
#!/bin/bash
var=$(cat)
echo $var | head -n 3 | tail -n 1这个脚本的问题是它打印所有行,但有趣的是,当我在命令行中单独输入命令时,我得到了预期的结果,即第三行。为什么会出现这种反常现象?我是不是做错了什么?
发布于 2017-05-24 22:31:42
head -n 3 | tail -n 1的目的是将第三行保存在变量中。使用读内建会更有效。
read
read
read var
echo "${var}"或者继续使用空格
IFS= read并且不连接以\结尾的行,或者不赋予\特殊含义
read -r发布于 2017-05-24 22:44:16
您不需要在脚本中使用$(cat)。如果脚本正在从标准输入中读取数据,那么只需在脚本中使用这一行:
head -n 3 | tail -n 1并按如下方式运行:
bash myscript.sh < file.txt这将从file.txt打印第三行
PS:你可以用这个更快的sed替换head + tail,从输入开始打印第三行:
sed '3q;d'发布于 2017-05-24 22:17:26
shell将拆分var变量,因此echo将获取多个参数。你需要引用你的变量来防止这种情况的发生:
#!/bin/bash
var=$(cat)
echo "$var" | head -n 3 | tail -n 1https://stackoverflow.com/questions/44160658
复制相似问题