Bashスクリプトは結果の代わりに式を印刷します。

Bashスクリプトは結果の代わりに式を印刷します。

パラメータ数と顧客が提供した最初のパラメータの積を計算しようとしています。ここで、パラメータは10個と15個なので、合計パラメータ数は2個です。これでシェルは2 * 10を実行したいと思います(10が最初のパラメータなので)。答えの代わりにコードを受け取りました。

私が書いたプログラム:

r=$(echo "$1 \* $#")
echo "Following are the numbers you entered $@ "
echo "first number : $1. and second number: $2."
echo "total number of entered numbers: $#"
echo "expected result: $r"

結果:

root@LAPTOP-J:~# bash test.sh 10 15
Following are the numbers you entered 10 15
first number : 10. and second number: 15.
total number of entered numbers: 2
expected result: 10 \* 2
root@LAPTOP-J5JNFL7K:~#

答え1

まあ、echoやることは引数で与えられた文字列を印刷するだけです。エコーのように元の声が戻ってきます。

echo foo barPrint foo bar; echo "$var"内容を印刷します$var(シェル拡張値以降)echo "$1 \* $#"。 (アスタリスクは二重引用符内の特殊文字ではないため、バックスラッシュは削除されません。)10 \* 2$1$#

expr算術演算を実行できるものと混同する可能性があります。

ただし、シェルで算術演算を実行するために外部コマンドは必要ありません。単に算術拡張を使用するだけです$(( .. ))。たとえば、次のようになります。

r=$(( $1 * $# ))

ただし$1、数値以外のものを含めると、結果は奇数になる可能性があります($1少なくともBashでは、に含まれる任意のコマンドを実行しても同じです)。深刻な作業の場合は、まずそこにある値の完全なチェックを実行したい場合があります。

関連情報