bash運算問題 - Linux

Table of Contents

各位千萬年薪大大好
小弟這裡有script的問題一直找不到解

問題1:
#!/bin/csh

set a = "16 + 1"
@ b = $a
echo $b

答案是17

set a = "16 * 1"
@ b = $a
echo $b

結果卻無解
後來發現帶有"*"的字元沒辦法存進變數a裡 (+ - / 皆可)
請問有什麼辦法可以解這題嗎?


問題2:
我有一個檔案test.txt
裡面只有一行 16 + 1 的字眼

#!/bin/csh

set a = `awk 'NR == 1 {print $0}' test.txt`
@ b = $a
echo $b

答案是17

但是改成如下寫法
@ b = `awk 'NR == 1 {print $0}' test.txt`
卻顯示 @: Badly formed number 錯誤
請問這兩邊差別在哪裡?


現在很尷尬的問題是假如test.txt裡是16 * 1
就無法將文本內容parsing到變數a裡(出現問題1的問題)
導致整個script無法處裡test.txt裡的乘法
百思不得其解
網路上的文章也查過了還是找不到解法
各位大大看我家搬到現在的份上
救救小弟吧(跪)

--

All Comments

Emily avatarEmily2021-07-24
set a='16 * 1' 或 set a="16 \* 1"
Liam avatarLiam2021-07-29
c-shell? bash-shell? 請搞清楚要玩哪一種.
Skylar Davis avatarSkylar Davis2021-08-03
我的 csh/tcsh 都正常執行運算。
Dinah avatarDinah2021-08-05
標題是 bash。XD
Xanthe avatarXanthe2021-08-07
bash的set不是用來設普通變數的吧?
Belly avatarBelly2021-08-08
不好意思 我使用的是csh
Iris avatarIris2021-08-09
shebang是csh?
Skylar DavisLinda avatarSkylar DavisLinda2021-08-14
回mp大 對 我是使用csh
Kelly avatarKelly2021-08-15
問題一 用一樓的方法可以嗎 也可以試試 set noglob 關掉
wildcard
Kyle avatarKyle2021-08-19
你應該是說 echo $a 顯示內容。加上雙引號可以避免 *
被 shell 識別展開當作找目前工作目錄檔名帶入情況
Dinah avatarDinah2021-08-21
可以用bc做 cat test.txt | bc