烦恼一般都是想太多了。

0%

Bash中对字符的操作

问题的来源是在安卓开发的时候,美工更换了各种图标。需要进行替换。但是有一个蛋疼的问题就是,我们的 app 是分渠道的,有的资源是公用的,所以名称也是一致。我不能将图标进行替换,因为那样会影响其他渠道的图标显示。但是当我将图标放到渠道包的资源目录下的时候,因为出现了一个苦恼的问题。因为美工不专业,做的图标是 xhdpi的,那么如果是在 xxhdpi 或者是 xxhdpi 的分辨率下,读取的将不是我放在渠道包的 xhdpi 下的图标。

因此,就想着将此图标改个名字。但是图标都是很多的哦,总不能一个个 命名吧。所以准备把文件名都加上一个 _new 来表示新的UI。

最终来说,很简单就能实现了:

for f in `ls *.png`; do mv $f ${f/%.png/_new.png}; done

同时又来查阅了一下其操作方法。

参数替换

TLDP上的文档

对于一个变量,我们可以用 ${var[:-+?=]default} 的形式来进行使用。

  • ${parameter-default} 如果 parameter(变量) 没有设置(声明),就使用 default (字符)
  • ${parameter=default} 如果 parameter(变量) 没有设置(声明),则将 parameter 的值设置为 default(字符)
  • ${parameter+alt_value} 如果 parameter 已经设置(声明),使用 alt_value(字符),否则使用 null 字符。
  • ${parameter?err_msg} 如果 parameter 没有设置,就会打印错误消息 err_msg,同时以退出状态 1 结束脚本。如果已设置,就使用他。
  • : 可以用在 -=+ 前,表示将已声明但值为 null 也进行匹配。

长度/子字符

  • ${ #parameter} 得出字符长度。
  • ${var#Pattern} 移除 Pattern(必须是从左开头开始匹配) 最短匹配的内容。echo ${PWD#/*/}
  • ${var##Pattern}移除 Pattern(必须是从左开头开始匹配) 最长匹配的内容。echo ${PWD##/*/}
  • ${var%Pattern} 移除最短匹配,从右至左 echo ${PWD%/*}
  • ${var%%Pattern} 移除最长匹配,从右至左。echo ${PWD%%/*}

变量扩展/替换

  • ${var:pos} 截短 pos 前的内容 ${PWD:8}
  • ${var:pos:len}pos 处开始,截取 len 个字符 ${PWD:8:2}
  • ${var/Pattern/Replacement} 替换一次
  • ${var//Pattern/Replacement} 全部替换
  • ${var/#Pattern/Replacement} 匹配开头进行替换。${PWD/#\/Users/\/What}
  • ${var/%Pattern/Replacement} 匹配结尾进行替换。${PWD/%\/source/\/What}
  • ${!varprefix*}, ${!varprefix@} 所有以 varprefix 开头的变量。