Expr

expr 和變數

  • May 11, 2017

如何執行腳本: ./script.sh 1 \* 2

最終:./script.sh 1 '*' 2

我的腳本看起來如何:

args="$@" # the first line of the script
result=$(($args))
echo "$args = $result"

是否有效:是

**我想要實現的目標:**我想使用expr而不是$((...))

就像是:

args="$@" # the first line of the script
result=`expr $args`
echo "$args = $result"

它適用於像 之類的輸入參數,但對於星號(星號)符號1 + 2,它不能正常工作(或者,更可能的是:)。expr: syntax error我想知道為什麼這不能按預期工作以及我應該如何解決這個問題。

像這樣的腳本:expr "$@"確實有效 - 我只是不明白當我分配$@給一個變數時發生了什麼。

為什麼你的腳本不起作用

您的腳本現在執行萬用字元擴展以將萬用字元替換為目前工作目錄中的所有文件。如果您set -x在腳本頂部添加選項,這一點很明顯。

$ ./expr_script.sh 2 '*' 2
+ args='2 * 2'
++ expr 2 -23.txt add_location_name.py expr_script.sh kusalananda 'Movie A (2014)' 'Movie B (2016)' one.test popup_script.sh somefile2.txt somefile.txt somethings texts three.test turnSignal.v two.test 2
expr: syntax error
+ result=
+ echo '2 * 2 = '
2 * 2 = 

如何修復它

您不需要在算術腳本中進行文件名擴展,因此使用set -f選項禁用全域擴展。

#!/bin/bash
set -f
##set -x
args="$@" # the first line of the script
result=$(expr $args)
echo "$args = $result"

這有效:

$ ./expr_script.sh 2 '*' 2
2 * 2 = 4

引用自:https://unix.stackexchange.com/questions/364480