부동 소수점 계산기로서의 Bash

부동 소수점 계산기로서의 Bash

나는 사용했다이것부동 소수점 숫자를 계산하는 함수를 작성하세요.

mt (){
echo "$1" | bc -l | awk '{printf "%f", $0}'
echo ' ' 
}

이것은 훌륭하게 작동하지만 방법이 있는지 궁금합니다.함수 호출을 완전히 생략부동 소수점 연산을 시도할 때 반환되는 오류 메시지를 활용하세요.

$ 45.0+1.2
-bash: 45.0+1.2: command not found

이것이 가능한가? 그렇다면 어떻게 해야 할까요?

편집하다

나는 반대 투표가 내가 이것을 충분히 생각하지 않았다는 것을 의미한다고 생각하지만 명확한 의견이 도움이 될 것입니다.

내가 사용하고 있던 것은계산을 할 때 함수를 사용하는데, 짧은 시간에 많은 계산을 하다 보면 mt를 잊어버리는 경우가 많습니다. 이 목적을 위해서는 최초의 유일한 함수 호출이 필요합니다.나는 단순히 파이썬을 사용하고 하루에 전화할 수 있습니다.

나의 무지에 대해 죄송합니다.

답변1

Bash 환경에 로드될 위치에 이것을 추가하십시오: ( ~/.bashrc는 옵션입니다)(이건 나쁜 생각이야공백 없이 나누기는 작동하지 않습니다. 이유는 발췌된 매뉴얼 페이지를 참조하세요. (일부 GAWK가 아닌 AWK 버전만 종료해야 함)

command_not_found_handle() { 
    # AWK version, security risk
    awk "BEGIN { print $*; exit; }" # Use AWK as a calculator
    # If you want to keep what you did previously:
    # BC version, possibly less of a security risk, but an extra process is involved
    # echo "$*" | bc -l | awk '{printf "%f\n", $0}'
    echo "$0: $1: command not found" 1>&2 # Send error to STDERR
    exit 127 # Keep same exit status as otherwise
}

bash 매뉴얼 페이지에서: (이 함수는 bash가 다른 옵션을 모두 사용했을 때 호출됩니다)

If  the name is neither a shell function nor a builtin, and contains no
slashes, bash searches each element of the PATH for  a  directory  con-
taining  an  executable  file  by that name.  Bash uses a hash table to
remember the full pathnames of executable files (see hash  under  SHELL
BUILTIN  COMMANDS  below).  A full search of the directories in PATH is
performed only if the command is not found in the hash table.   If  the
search is unsuccessful, the shell searches for a defined shell function
named command_not_found_handle.  If that function exists, it is invoked
with  the  original command and the original command's arguments as its
arguments, and the function's exit status becomes the  exit  status  of
the  shell.  If that function is not defined, the shell prints an error
message and returns an exit status of 127.

관련 정보