EDA365电子论坛网
标题:
shell 如何实现i++操作以及字符串截取操作
[打印本页]
作者:
mytomorrow
时间:
2020-4-16 10:48
标题:
shell 如何实现i++操作以及字符串截取操作
这几天有个bug缠绕了我半天,于是就有了本文章。
, m: n/ u. H. d
, O& p2 A8 R( O: {/ Y
触摸屏因为加了个笔记本键盘后不能用了,摘掉笔记本键盘后,触摸屏又可以用了,真是见鬼了。
' y8 ~3 N$ l5 Y' R0 x
, _ c# t9 q1 n. o
稍微研究一看,原来是加了笔记本键盘后导致TP驱动的设备节点改变了,比如说,以前是event4,加了笔记本键盘后event6,导致应用程序使用的设备节点跟TP驱动不匹配。
2 R1 R7 ~+ H2 @( D1 b% Q
7 E8 k2 }" ~3 M i. q" q E C
于是,我就纳闷了,以前的方法是在编译的时候写死了,比如配置为4了,运行的时候就是设置为4,不变了,其实这是有一定风险的,例如刚才说的例子。那么,怎么改呢?能不能在允许的时候判断出TP设备节点是哪个呢?答案是可以的。
/ c. ~: M0 F: R0 F4 u7 N
4 ?1 F9 {2 o5 {4 [# c5 X$ |3 Q8 @
在添加自动获取TP的event_num方案时,遇到了一点点问题:
4 O+ w9 U3 c6 }+ ?4 j/ _
' r& y, u2 y- B* x; i
一、在遍历设备节点时候,怎么记录下event_num,C语言很简单啊,i++,但是shell里面不能这么做。
2 l& q6 q% M p9 G
( l7 r+ A0 c! [$ i) F, n
二、怎么截获字符串的前几个字符?
" k3 R' L2 X v% V& S
* W( Y* m. N" k9 D: t0 P" s
+ f( O+ S6 H/ b
8 `- f+ B9 v6 x2 j7 x/ ^3 ?
先解决第一个问题,在网上搜了一下,发现有个人写的很好,这里引用一下:
& Y' {/ Y5 [+ k
1 L: T/ ~3 B/ s9 h" B/ ^% y E
a=1
1 r! `( W" U. r
a=$(($a+1))
: r+ A" m- @) ~6 x, t( ]6 F
a=$[$a+1]
$ K ^( }! L3 |$ I5 |
a=`expr $a + 1`
t; J+ N8 a: p( \3 d' _2 M
let a++
' l0 V' N0 U N, A, a* a* p
let a+=1
+ [% Y/ @$ w/ L- K! o' h' k% n6 ]3 v3 g
这几种方法都可以实现i++操作,其中我在实际中使用了 let a++
9 j4 n6 J& w" O. H) G* Q
5 \$ V @! U4 g9 P& h
/ I5 o4 y4 k$ I" L) T# P
第二个问题的方法其实也很多,我这里只说一种容易记住的:
& \* L& N0 E0 {$ R# L. u
3 Z5 l, p' |( e8 \: Y! A
例如:有个字符串变量string=abcdefgh,我需要截取前面4个字符,那么shell应该怎么实现?
6 K* y5 W2 V) F& Z; k* g; s3 m
! M2 g# J( |2 c* W4 y, l
1 x( L5 m* x$ A2 N& q
string="abcdefgh"
% |* ~% K! W! g/ U5 L" R$ S
cut_string=`echo $string|cut -c 1-4`
) V& P9 U0 h4 U
结果:cut_string=abcd
5 P( J5 \4 m0 {
/ H S; R+ h$ V8 C* t& l. A
以上2个问题是在实际解决问题的时候遇到的,虽然是不起眼的技术点,慢慢积累还是有用的。
9 i! @* `! j) g
1 E. q6 J) M3 z6 K
古语云:不积跬步,无以至千里;不积小流,无以成江海。
n4 X- G" G0 U6 h( S$ C9 G* {
4 K9 B- N* h0 t8 O4 s
/ |( X! L+ t2 S# Q: o' b
作者:
yin123
时间:
2020-4-16 18:56
shell 如何实现i++操作以及字符串截取操作
欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/)
Powered by Discuz! X3.2