【发布时间】:2012-07-12 08:25:57
【问题描述】:
我在 bash 脚本中有同样简单的函数,我想将标准输出作为输入传递给它。
jc_hms(){
printf "$1"
}
我想以这种方式使用它。
var=`echo "teststring" | jc_hms`
当然,我使用冗余函数 echo 和 printf 来简化问题,但你明白了。现在我收到一个“未找到”错误,我认为这意味着我的参数定界错误(“$1”部分)。有什么建议吗?
原来jc_hms函数是这样使用的:
echo `jc_hms "teststring"` > //dev/tts/0
但我想先将结果存储在一个变量中以供进一步处理,然后再将其发送到串行端口。
编辑: 所以澄清一下,我不是想把东西打印到串口上,我想接口到我的 bash 函数应该是“|”管道字符,我想知道这是否可能。
编辑:好的,这是完整的功能。
jc_hms(){
hr=$(($1 / 3600))
min=$(($1 / 60))
sec=$(($1 % 60))
printf "$hs:%02d:%02d" $min $sec
}
我正在使用该函数来形成这行代码的字符串
songplaytime=`echo $songtime | awk '{print S1 }'`
printstring="`jc_hms $songplaytime`" #store resulting string in printstring
其中 $songtime 是一个字符串,表示为由空格分隔的“playtime totaltime”。
我希望我可以在一行中完成此操作,并在 awk 之后通过管道传输
printstring=`echo $songtime | awk '{print S1 }' | jc_hms`
像这样。
【问题讨论】:
-
您的问题是“$1”是函数的命令行参数,而不是标准输入,这是从管道中找到文本的位置。
-
那么我将如何访问标准输入。例子?
-
我认为这可能是XY problem。您能否更新您的问题,告诉我们您真正想要实现的目标,而不是您如何尝试实现它?
-
jliu83:如果
jc_hms在管道的接收端,stdin 将呈现给函数内的第一个命令。但是,请发布 jc_hms 真正的样子,以便我们确定适合您情况的最佳解决方案。 -
请注意你的函数是错误的。它应该真的像
jc_hms() { hr=$(($1 / 3600)); min=$((($1 % 3600) / 60)); sec=$((1 % 60)); printf "$hs:%02d:%02d" $min $sec; }