作者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/cn.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