2010-02-09 7 views
5

저는 C로 계산기를 약간 만들고 있습니다. 간단한 산술 수식을 프로그램에 전달하고 싶습니다. 하지만 실제로 '*'문자를 내 프로그램에 전달하는 것을 좋아하지 않습니다. 왜 안 되니? 그리고 어떻게 별표를 다른 것으로 변경하지 않고이 문제를 해결할 수 있습니까? 감사합니다.* linux 명령 줄에서

답변

9

문자 *은 일치하는 파일 이름을 확장하기위한 쉘의 트리거입니다. myprog "5 * 3"

  • 하지 마십시오 :

    • 탈출을 mycalc 5 \* 3
    • 장소를 따옴표로 전체 표현식을 입력하고 있는지 확인 계산기의 파서는 그런 식으로 작동합니다

      는 처리 방법에는 여러 가지가 있습니다 명령 행을 사용하십시오. 대신 자신의 입력을 사용하십시오. 당신이 뎁에서 검색 할 수 있습니다

  • +3

    OR : 당신이 계산기를 많이 사용하려는 경우이 방법, 당신은 모든 사용을 탈출하지 않아도 항상 빈 디렉토리 : –

    +2

    재미있는 아이디어를 실행합니다. 전용 * 계산 디렉토리 *로 판매 될 수 있습니다. 아니면 * 안전한 계산 환경 *. :-) – wallyk

    +0

    쉘에 따라 다릅니다. 기본적으로 Bash는 아무 것도 일치하지 않으면 glob을 펼치지 않은 채 glob ('shopt -s nullglob')을 제거하거나 전체 명령 ('shopt -s failglob')을 제거하도록 구성 할 수 있습니다.예를 들어, 다른 쉘에서는'tcsh'에서 마지막 동작이 기본값입니다. – ephemient

    3

    리눅스 명령 쉘 (bash, tcsh, ksh 등)은 프로그램이보기 전에 파일 목록에 '*'를 확장합니다. 사용자가 별표를 작은 따옴표로 묶거나 백 슬래시로 이스케이프 처리하거나 'x'를 대신 사용하도록 설정할 수 있습니다. 특히 사용자 친화적 인 것은 없습니다.

    7

    *은 현재 디렉토리의 모든 파일과 일치하도록 확장됩니다 (이를 "globbing"이라고 함). *를 인용하거나 이스케이프해야하거나 다른 기호를 사용해야합니다.

    1

    *은 bash에서 "현재 디렉토리의 모든 항목"으로 평가됩니다. 그러나 .은 올바르게 작동하며 수학의 곱셈 기호, 특히 스칼라 곱셈에 자주 사용됩니다.

    6

    * globbing을 호출하고 당신이하고있는 디렉토리에있는 모든 파일을 확장합니다. 그냥 말을 인용 * 및

    ./yourprogram '10 * 10'

    또는

    ./yourprogram 10 '*' 10

    와 같은 프로그램을 실행합니다 첫 번째 경우에는 프로그램이 1 개의 인수 만 전달하고 argv [1]는 문자열 "10 * 10"이되고 두 번째 경우는 3 개의 인수가 전달됩니다

    0

    은 "CALC"응용 프로그램은 apt-get을 설치 석회질은 3 * 3하지만 * 3

    -1

    3을 탈출 시도 평가할 수있다 저장소, 별표는 C

    에서 특수 문자이다

    *로 변경 *

    2

    마지막 기술은 언급되지 않았습니다. 모든 사용법을 인용/이스케이프 처리하는 Insteead를 사용하면 globbing을 끌 수 있습니다.

    # For bash 
    set -o noglob 
    
    # For csh/tcsh 
    set noglob 
    
    # Now that noglob is set, you can safely use * 
    calc 3 * 3 
    
    +0

    +1 - 사용자가보다 자연스러운 언어 입력을 즐길 수 있도록 래퍼 스크립트에서 'calc'를 실행하는 것이 좋습니다. 또한 파일에서 입력을 파이핑 할 때 매우 유용합니다. –