0

シンプルなコマンドライン計算機を探していましたが、calcはシンプルで便利であることがわかり、サーバーにインストールされていることがわかりました。

これはcalcのサイトです:http ://www.isthe.com/chongo/tech/comp/calc/

しかし、私が次のような簡単な計算を試みたとき:

calc 3/(1+2)

それは私にこのエラーメッセージを与えました:

-bash: syntax error near unexpected token `('

ただし、これは正常に機能します。

calc 3*(1+2)

3*(1+2) = 9.000000

サーバーのバージョンは次のとおりです。

$ uname -sr
Linux 3.2.0-23-generic

エラーがどのように発生したかを誰かが知っていますか?ありがとう!

4

2 に答える 2

4

算術式に引用符を追加するだけです。

元 :

$ calc '3/(1+2)'
    1

「より多くの見積もりを使用してください!」それらは不可欠です。また、「」と「」および「」の違いについても学びます。http: //mywiki.wooledge.org/Quotesおよびhttp://wiki.bash-hackers.org/syntax/wordsを参照してください。

于 2013-03-26T21:15:34.743 に答える
4

わかった。これが何が起こっているのかです。

これはcalcとは何の関係もなく、bashとはすべて関係があります。これを説明するために、最初にエコーを使用した例を示します。

wlynch@host:/tmp/blah$ ls          # No files in this directory
wlynch@host:/tmp/blah$ echo *(3)   # This works as you expect.
*(3)                               #
wlynch@host:/tmp/blah$ echo *(4)   # This works as you expect.
*(4)                               #
wlynch@host:/tmp/blah$ touch 3     # Create a file named 3 in the directory.
wlynch@host:/tmp/blah$ ls          #
3                                  #
wlynch@host:/tmp/blah$ echo *(3)   # This now gives a different result!
3                                  #
wlynch@host:/tmp/blah$ echo '*(3)' # Quoting gives what you want.
*(3)                               #
wlynch@host:/tmp/blah$ echo *(4)   # This works as you previously expected.
*(4)

。という名前のディレクトリにファイルを作成すると、出力が変更されていることに注意してください3

ここで起こっているの*(pattern)は、ワイルドカードです。含まれているパターンの任意の数と一致します。Bashには奇妙な副作用もあります。パターンが一致しない場合、何も返さずに、元のパターンを返します。

したがって、あなたの場合、誤ってbashのワイルドカード置換方法の1つを使用しています。パターンマッチング

さて、なぜ/()失敗するのですか?これは、括弧がbashの別のコマンドであり、これがたまたま構文エラーとして使用されているためです。グループ化コマンド

他の回答で述べたように、解決策は、コマンドライン引数を引用符で囲み、これらの機能のいずれも有効にしないようにすることです。


また、余談ですが、を使用する機能を無効にすることができ*(pattern)ます。これを行うと、括弧のために/()との両方*()が失敗します()

wlynch@host:/tmp/blah$ shopt -s extglob
wlynch@host:/tmp/blah$ echo *()
*()
wlynch@host:/tmp/blah$ echo /()
bash: syntax error near unexpected token `('

wlynch@host:/tmp/blah$ shopt -u extglob
wlynch@host:/tmp/blah$ echo *()
bash: syntax error near unexpected token `('
wlynch@host:/tmp/blah$ echo /()
bash: syntax error near unexpected token `('
于 2013-03-26T21:57:08.027 に答える