为了将内容导入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的方式是否有问题。
非常感谢。
file <core-dump-file>
? - Roger<core-dump-file>
替换为你所发布的错误信息中应该被创建的核心文件名。:-) 它可能是bash.core
或者只是core
或其他名称。尝试运行ls -lt | head
命令来查看最近在当前目录下创建的文件。 - ghotilocal var=$(something)
实际上是一种反模式,因为它具有local
的退出状态(始终成功),而不是something
的退出状态。更好的方法是local var; var=$(something)
。 - Charles Duffy$1
是否为空有点奇怪,但是却将所有的$@
连接起来(在这种情况下,将其分配给字符串并不是定义行为--顺便说一下,使用$*
代替)。如果您想查看是否有任何参数,请查看$#
--否则,example '' "hello"
将尝试从stdin读取。 - Charles Duffy