"function: not found" Termux sh 下出错

"function: not found" error under Termux sh

启动脚本后testyon.sh:

#!/bin/sh 
function yon { 
while true; do 
echo "Start proc?[Y/n]: "
read -r "[Y/n]: " yn 
case $yn in 
[Yy]*) echo "Starting" ; return 0 ;;
[Nn]*) echo "Stopped" ; return 1 ;; 
esac 
done }

我收到这个错误:

$ sh testyon.sh
testyon.sh: 2: testyon.sh: function: not found
testyon.sh: 7: testyon.sh: Syntax error: newline unexpected (expecting ")")
$

如何解决?

我猜当你调用 sh 时 shell 是 运行 是被函数语法抛弃了。声明函数的可移植方式是

yon() { 
    while true; do 
        echo "Start proc?[Y/n]: "
        read -r "[Y/n]: " yn 
        case $yn in 
            [Yy]*) echo "Starting"; return 0 ;;
            [Nn]*) echo "Stopped"; return 1 ;; 
        esac 
    done
}

参考:POSIX 规范,Shell 命令语言,Function Definition Command

两条备注:

  • 您似乎提示了用户两次,但我不确定 read -r 命令中的提示是否有任何作用。它实际上似乎首先阻止了将任何内容读入 yn
  • Termux 附带一个完整的 Bash 生活在 /data/data/com.termux/files/usr/bin/bash,这将防止您的功能问题。