为了回答您的实际问题,当外壳函数位于管道的接收端时,标准输入由该函数内部执行的第一个命令读取。由于
printf是函数中的第一个也是唯一的命令,因此将忽略标准输入。有几种解决方法,包括使用
read内置方法将标准输入读入变量,该变量可以传递给
printf:
jc_hms () { read foo hr=$(($foo / 3600)) min=$(($foo / 60)) sec=$(($foo % 60)) printf "%d:%02d:%02d" "$hr" "$min" "$sec"}但是,由于您对管道的需求似乎取决于您对使用的感知需求
awk,所以让我建议以下替代方法:
printstring=$( jc_hms $songtime )
由于
songtime由一对以空格分隔的数字组成,因此外壳程序对的值进行单词拆分
songtime,并
jc_hms看到两个单独的参数。这不需要更改的定义
jc_hms,也不需要通过标准输入将任何内容通过管道传递给它。
如果您还有其他原因
jc_hms需要阅读标准输入,请告诉我们。



