作者bpsk (kaoyu)
看板Linux
標題[問題] bash運算問題
時間Sat Jul 24 05:28:25 2021
各位千萬年薪大大好
小弟這裡有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裡的乘法
百思不得其解
網路上的文章也查過了還是找不到解法
各位大大看我家搬到現在的份上
救救小弟吧(跪)
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 106.1.232.133 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Linux/M.1627075707.A.B86.html
1F:推 Bencrie: set a='16 * 1' 或 set a="16 \* 1" 07/24 11:08
2F:→ kikilalagirl: c-shell? bash-shell? 請搞清楚要玩哪一種. 07/24 11:38
3F:→ EdwardGJLee: 我的 csh/tcsh 都正常執行運算。 07/24 11:42
4F:→ EdwardGJLee: 標題是 bash。XD 07/24 11:43
5F:推 mpst897: bash的set不是用來設普通變數的吧? 07/24 12:51
6F:→ bpsk: 不好意思 我使用的是csh 07/24 12:51
7F:→ mpst897: shebang是csh? 07/24 12:54
8F:→ bpsk: 回mp大 對 我是使用csh 07/24 12:59
9F:推 mpst897: 問題一 用一樓的方法可以嗎 也可以試試 set noglob 關掉 07/24 13:26
10F:→ mpst897: wildcard 07/24 13:26
謝謝各位的幫忙(鞠躬)
後來發現 set a = "16 * 1" 是可以存入的
但是要echo出來debug的時候要寫 echo "&a" 而不是 echo &a
具體原因就不知道了
謝謝各位前輩
小弟繼續加班惹QQ
※ 編輯: bpsk (106.1.232.133 臺灣), 07/24/2021 19:35:07
12F:→ kenduest: 你應該是說 echo $a 顯示內容。加上雙引號可以避免 * 07/24 19:46
13F:→ kenduest: 被 shell 識別展開當作找目前工作目錄檔名帶入情況 07/24 19:46
14F:推 mati628: 可以用bc做 cat test.txt | bc 07/28 18:06