当前位置: 首页 > 工具软件 > shell-tricks > 使用案例 >

Rich’s sh (POSIX shell) tricks

屈升
2023-12-01

 

Why the following not working

echo "hello" | read  var

echo $var

 

 

Refer file:

 

http://www.etalabs.net/sh_tricks.html

 

Reading input line-by-line

IFS= read -r var

This command reads a line of input, terminated by a newline or end of file or error condition, from stdin and stores the result in var. Exit status will be 0 (success) if a newline is reached, and nonzero (failure) if a read error or end of file terminates the line. Robust scripts may wish to distinguish between these cases. According to my reading of POSIX, the contents of var should be filled with the data read even if an error or premature end of file terminates the read, but I am uncertain whether all implementations behave as such and whether it is strictly required. Comments from experts are welcome.

One common pitfall is trying to read output piped from commands, such as:

foo | IFS= read var

POSIX allows any or all commands in a pipeline to be run in subshells, and which command (if any) runs in the main shell varies greatly between implementations — in particular Bash and ksh differ here. The standard idiom for overcoming this problem is to use a here document:

IFS= read var << EOF
$(foo)
EOF

 

 类似资料:

相关阅读

相关文章

相关问答