linux脚本冒号,Shell中的冒号 :
{str:=expr}如果变量str不为空,${str:=expr}就等于str的值,若str为空,就把expr的值赋值给str。
用途说明
我们知道,在Linux系统中,冒号(:)常用来做路径的分隔符(PATH),数据字段的分隔符(/etc/passwd)等。其实,冒号(:)在Bash中也是一个内建命令,它啥也不做,是个空命令、只起到占一个位置的作用,但有时候确实需要它。当然,它也有它的用途的,否则没必要存在。在·Linux的帮助页中说它除了参数扩展和重定向之外不产生任何作用。
man : 写道
: [arguments]
No effect; the command does nothing beyond expanding arguments and performing any specified redirections. A zero exit code is returned.
常用参数
格式::
·啥也不做,只起到占位符的作用。比如在编写脚本的过程中,某些语法结构需要多个部分组成,但开始阶段并没有想好或完成相应的代码,这时就可以用:来做占位符,否则执行时就会报错。
Bash代码 if [ "today" == "2011-08-29" ]; then
:
else
:
fi
格式:: your comment here
格式:# your comment here
写代码注释(单行注释)。
格式:: 'comment line1
comment line2
more comments'
写多行注释。
格式:: >file
格式:>file
清空文件file的内容。
格式:: ${VAR:=DEFAULT}
当变量VAR没有声明或者为NULL时,将VAR设置为默认值DEFAULT。如果不在前面加上:命令,那么就会把${VAR:=DEFAULT}本身当做一个命令来执行,报错是肯定的。
使用示例
示例一 参数扩展
[root@node56 ~]# : abc=1234 [root@node56 ~]# echo $abc [root@node56 ~]# : ${abc:=1234}
[root@node56 ~]# echo $abc
1234
[root@node56 ~]# ${abc:=1234}
-bash: 1234: command not found
[root@node56 ~]#
示例二 清空文件
[root@node56 ~]# cat <<123.txt [root@node56 ~]# cat 123.txt Hello
[root@node56 ~]# : >123.txt [root@node56 ~]# cat 123.txt
[root@node56 ~]#
示例三 脚本注释、占位符
脚本test_colon.sh
Bash代码 #!/bin/sh
: this is single line comment
: 'this is a multiline comment,
second line
end of comments'
if [ "1" == "1" ]; then
echo "yes"
else
:
fi
[root@node56 ~]# ./test_colon.sh
yes
另外, : 有一个side-effect,就是 重定向:-bash-3.2$ : echo "this is a comment" > word-bash-3.2$ ls
MakeFileFindtree word
makefile中的冒号有很多用处:
1.赋值的时候用;
2.“:目标依赖关系
3.还用于分隔不同的目录,如:
SRC_PATH ?= .:..风格1: 递归扩展变量(recursively expanded variable)变量定义格式是,变量和值之间用等号,即 =例如:foo = $(bar)bar = $(ugh)ugh = Huh?all:;echo $(foo)将显示 Huh?再例如:CFLAGS = $(include_dirs) -Oinclude_dirs = -Ifoo -Ibar缺点是不能这么定义:CFLAGS = $(CFLAGS) -O ,将会死循环风格2: 简单扩展变量(simply expanded variables)变量定义格式是,变量和值之间用冒号等号,即 :=例如x := fooy := $(x) barx := later等价于:y := foo barx := later另外 ?= 含义为:没有定义则赋值FOO ?= bar等价于ifeq ($(origin FOO), undefined)FOO = barendif+= 是为变量后面追加字符变量替换$(var:a=b),是将 var 变量中每一个单词后面的 a 替换为 b$(var:suffix=replacement)等价于$(patsubst %suffix,%replacement,$(var))$(foo:%.o=%.c) ,由于出现了 %, 其功能和 patsubst 等价$(var:pattern=replacement)等价于$(patsubst pattern,replacement,$(var))风格1: 递归扩展变量(recursively expanded variable)变量定义格式是,变量和值之间用等号,即 =例如:foo = $(bar)bar = $(ugh)ugh = Huh?all:;echo $(foo)将显示 Huh?再例如:CFLAGS = $(include_dirs) -Oinclude_dirs = -Ifoo -Ibar缺点是不能这么定义:CFLAGS = $(CFLAGS) -O ,将会死循环风格2: 简单扩展变量(simply expanded variables)变量定义格式是,变量和值之间用冒号等号,即 :=例如x := fooy := $(x) barx := later等价于:y := foo barx := later另外 ?= 含义为:没有定义则赋值FOO ?= bar等价于ifeq ($(origin FOO), undefined)FOO = barendif+= 是为变量后面追加字符变量替换$(var:a=b),是将 var 变量中每一个单词后面的 a 替换为 b$(var:suffix=replacement)等价于$(patsubst %suffix,%replacement,$(var))$(foo:%.o=%.c) ,由于出现了 %, 其功能和 patsubst 等价$(var:pattern=replacement)等价于$(patsubst pattern,replacement,$(var))风格1: 递归扩展变量
(recursively expanded variable)
变量定义格式是,变量和值之间用等号,即 =
例如:
foo = $(bar)
bar = $(ugh)
ugh = Huh?
all:;echo $(foo)将显示 Huh?再例如:CFLAGS = $(include_dirs) -Oinclude_dirs = -Ifoo -Ibar缺点是不能这么定义:CFLAGS = $(CFLAGS) -O ,将会死循环风格2: 简单扩展变量(simply expanded variables)变量定义格式是,变量和值之间用冒号等号,即 :=例如x := fooy := $(x) barx := later等价于:y := foo barx := later另外 ?= 含义为:没有定义则赋值FOO ?= bar等价于ifeq ($(origin FOO), undefined)FOO = barendif+= 是为变量后面追加字符变量替换$(var:a=b),是将 var 变量中每一个单词后面的 a 替换为 b$(var:suffix=replacement)等价于$(patsubst %suffix,%replacement,$(var))$(foo:%.o=%.c) ,由于出现了 %, 其功能和 patsubst 等价$(var:pattern=replacement)等价于$(patsubst pattern,replacement,$(var))将显示 Huh?
再例如:
CFLAGS = $(include_dirs) -O
include_dirs = -Ifoo -Ibar
缺点是不能这么定义:CFLAGS = $(CFLAGS) -O ,将会死循环风格2: 简单扩展变量(simply expanded variables)变量定义格式是,变量和值之间用冒号等号,即 :=例如x := fooy := $(x) barx := later等价于:y := foo barx := later另外 ?= 含义为:没有定义则赋值FOO ?= bar等价于ifeq ($(origin FOO), undefined)FOO = barendif+= 是为变量后面追加字符变量替换$(var:a=b),是将 var 变量中每一个单词后面的 a 替换为 b$(var:suffix=replacement)等价于$(patsubst %suffix,%replacement,$(var))$(foo:%.o=%.c) ,由于出现了 %, 其功能和 patsubst 等价$(var:pattern=replacement)等价于$(patsubst pattern,replacement,$(var))风格2: 简单扩展变量
(simply expanded variables)
变量定义格式是,变量和值之间用冒号等号,即 :=
例如
x := foo
y := $(x) bar
x := later
等价于:
y := foo bar
x := later
另外 ?= 含义为:没有定义则赋值
FOO ?= bar
等价于
ifeq ($(origin FOO), undefined)
FOO = bar
endif
+= 是为变量后面追加字符变量替换$(var:a=b),是将 var 变量中每一个单词后面的 a 替换为 b$(var:suffix=replacement)等价于$(patsubst %suffix,%replacement,$(var))$(foo:%.o=%.c) ,由于出现了 %, 其功能和 patsubst 等价$(var:pattern=replacement)等价于$(patsubst pattern,replacement,$(var))变量替换
$(var:a=b),是将 var 变量中每一个单词后面的 a 替换为 b
$(var:suffix=replacement)
等价于
$(patsubst %suffix,%replacement,$(var))
$(foo:%.o=%.c) ,由于出现了 %, 其功能和 patsubst 等价$(var:pattern=replacement)等价于$(patsubst pattern,replacement,$(var))$(var:pattern=replacement)
等价于
$(patsubst pattern,replacement,$(var))
关于第一种用法:
Makefile里的=显然是赋值的用法
linux脚本冒号,Shell中的冒号 :相关推荐
- linux脚本除号,shell中常用的特殊符号整理
在shell中常用的特殊符号罗列如下: # ; ;; . , / \ 'string'| ! $ ${} $? $$ $* "string"* ** ? : ^ $# $@ `co ...
- linux 脚本map,shell中map的用法
##实例代码 #!/bin/bash cat ./switchsql.txt | while read line do tmp_partition_name=`echo $line | awk -F ...
- linux 脚本continue,shell中的break和continue
使用continue时,只是终止余下的操作,而不会跳出整个循环. 复制代码 代码如下: #!/bin/bash limit=19 echo "printing Number 1 throug ...
- linux脚本编程(shell)浅介
linux脚本编程(shell)浅介 2006-01-10 11:45 27693人阅读 评论(18) 收藏 举报 脚本shelllinux编程bash语言 linux脚本(shell)编程 啊,昨天 ...
- Linux脚本保存管道中的变量,Linux下管道重定向使用以及Shell编程(操作系统)
实验名称:Linux的基本操作 实验目的: 1.了解管道和重定向 2.熟悉基本的Linux脚本的编写 实验环境:Ubuntu 12.4(32位,简体中文) 实验内容: 1.将当前用户目录下的文件清单输 ...
- shell脚本中linux命令特殊字符,shell中的特殊字符
shell中除使用普通字符外,还可以使用一些具有特殊含义和功能的特殊字符.在使用它们时应注意其特殊的含义和作用范围. 下面分别对这些特殊字符加以介绍. 1.通配符 通配符用于模式匹配,如文件名匹配.路 ...
- linux基础:shell中的sh与bash区别与常用命令
目录 一,什么是sh和bash? 二,shell的基本用法 2.1,变量 2.2,算术运算 2.3,使用 bash 计算器在shell脚本中进行浮点运算 2.4,shell中的条件判断命令test和[ ...
- python获取耗时的shell_python获取耗时的shell_关于Linux:在shell中获取程序执行时间...
我想在Linux shell中在几个不同的条件下执行一些东西,并且能够输出每次执行的执行时间. 我知道我可以编写一个Perl或python脚本来完成这个任务,但是有没有一种方法可以在shell中完成呢 ...
- linux脚本编程(shell)浅介 (转载)
linux脚本(shell)编程 啊,昨天上网看到一篇讲 linux/unix shell 的文章,想想自己最后写这东西也是一年前的事了,想想都快忘光了. 还是整理一下,做一次回顾,以后说不定还用得上 ...
最新文章
- 超星未来发布新一代高级别自动驾驶车载计算平台
- 基于 CNN 特征区域进行目标检测
- 如何写出安全的API接口(参数加密+超时处理+私钥验证+Https)- 续(附demo)
- 第一个 Web 程序
- synchronized锁机制 之 代码块锁
- 马云点名的工程师,除了几百封求爱信还有13项区块链专利
- java碰碰球历险记下载_幼儿园玩球教案碰碰球.doc
- 51单片机学习笔记——串口通信
- Java制作简易计算器
- 创造一个计算机语言,世界上第一个文言文编程语言诞生,创造它的是一个大学生...
- IVX低代码平台开发——微信小程序实现抽奖功能
- Comparator用法中o1-o2的问题
- Python在振动信号处理中的应用(五):振动加速度信号转换为速度或位移信号
- Unity 制作图集
- html 微信语音聊天,layaBOX实时语音聊天与微信登陆接口分享
- [转]ColdFusion简介
- 北大青岛_深圳嘉华_shell特殊变量演示(五)生产环境下使用变量子串
- 各大厂软件测试面试题+答案纯干货
- JAVA计算机毕业设计智能推荐电影网站Mybatis+源码+数据库+lw文档+系统+调试部署
- Oracle VM VirtualBox--USB功能扩展安装
热门文章
- magic系统能升级鸿蒙系统吗,magic4.0是鸿蒙系统吗_magic4.0是不是鸿蒙系统
- 嵌入式(C语言文件操作)
- 融云SDK实现类QQ即时通讯的前端开发
- 拆书帮第14期训练营——作业六:第一周复盘
- ie8 html js页面打印预览,Print.js javascript库 实现页面打印
- linux安装redis-4.0.2
- vi VS vim编辑器【有待完善】
- 滴滴出行基于RocketMQ构建企业级消息队列服务的实践
- 领域驱动系列-浅析VO、DTO、DO、PO
- 机动目标跟踪——匀加速运动模型(三维)