【发布时间】:2017-03-10 13:03:34
【问题描述】:
在尝试管道到 Bash 函数时,我写了这个:
example () {
if [ -z ${1+x} ]; then local S=${@:-$(</dev/stdin)}; else local S="$1"; fi
#echo "$S"
echo "$S" | tr ' ' '_'
}
echo 'Moizès Júnior' | example
example 'Moizès Júnior'
Moizès_Júnior
Moizès_Júnior
但是,在另一种情况下,我收到了正确的输出以及以下错误消息:“Segmentation fault (core dumped)”。
尝试调试它我问我在函数内部编写代码以获取 STDIN 的方式是否有问题。
非常感谢。
【问题讨论】:
-
谁是核心?重击?试试
type <core-dump-file> -
file
也应该给你文件名。 -
请问,我在哪里使用
file <core-dump-file>? -
仅供参考 --
local var=$(something)实际上是一个反模式,因为它的退出状态是local(总是成功),而不是退出状态something。最好local var; var=$(something)。 -
此外,仅查看
$1是否为空但随后将所有$@连接起来有点奇怪(无论如何,它没有定义分配给字符串的行为,由方式 - 在这种情况下使用$*代替)。如果要查看是否有任何参数,请查看$#-- 否则,example '' "hello"将尝试从标准输入读取。
标签: linux bash function pipe stdin