-
2019-09-19 17:10:22
冒号在Linux中是一个空命令,可以认为与shell的内建命令true相同,它的返回值是0.
在while循环中while :
与
while true
的作用是等效的
在 if/then 中可作为占位符if conditions then: #什么都不做 else take action fi
使用冒号还可以用作注释行的开始,但是如果有语法错误,仍将报错,这一点与使用#号不同
更多相关内容 -
Shell中冒号的特殊用法
2020-02-27 09:37:46前言 本文主要是参考了鸟哥写的...Shell中冒号在变量赋值时的各种特殊用法 变量设定方式 str变量没有设定时 str为空字符串时 str已经设定为非空字符串时 var=${str-expr} var=expr var="" var=$str var...
前言
- 本文主要是参考了鸟哥写的《鸟哥的Linux私房菜》。因为总是在各种脚本中见到
:-
的用法而只是了解其大概含义,所以翻阅了相关资料,编写此博文以作记录
Shell中冒号在变量赋值时的各种特殊用法
变量设定方式 str变量没有设定时 str为空字符串时 str已经设定为非空字符串时 var=${str-expr} var=expr var="" var=$str var=${str:-expr} var=expr var=expr var=$str var=${str+expr} var="" var=expr var=expr var=${str:+expr} var="" var="" var=expr var=${str=expr} str=expr
var=exprstr 不变
var=""str 不变
var=$strvar=${str:=expr} str=expr
var=exprstr=expr
var=exprstr 不变
var=$strvar=${str?expr} expr 输出至 stderr var="" var=$str var=${str:?expr} expr 输出至 stderr expr 输出至 stderr var=$str
End~
- 本文主要是参考了鸟哥写的《鸟哥的Linux私房菜》。因为总是在各种脚本中见到
-
shell中冒号的特殊用法分享
2021-01-10 10:13:17您可能感兴趣的文章:shell脚本中28个特殊字符的作用简明总结Shell命令行中特殊字符与其转义详解(去除特殊含义)Shell脚本中的特殊字符(美元符、反斜杠、引号等)作用介绍Shell脚本中的位置变量参数(特殊字符)实例... -
Shell中的冒号 :
2021-05-13 23:40:40用途说明我们知道,在Linux系统中,冒号(:)常用来做路径的分隔符(PATH),数据字段的分隔符(/etc/passwd)等。其实,冒号(:)在Bash中也是一个内建命令,它啥也不做,是个空命令、只起到占一个位置的作用,但有时候确实...{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里的=显然是赋值的用法
-
shell中冒号 : 用途说明
2021-05-15 22:24:05我们知道,在Linux系统中,冒号(:)常用来做路径的分隔符(PATH),数据字段的分隔符(/etc/passwd)等。其实,冒号(:)在Bash中也是一个内建命令,它啥也不做,是个空命令、只起到占一个位置的作用,但有时候确实需要它。...我们知道,在Linux系统中,冒号(:)常用来做路径的分隔符(PATH),数据字段的分隔符(/etc/passwd)等。其实,冒号(:)在Bash中也是一个内建命令,它啥也不做,是个空命令、只起到占一个位置的作用,但有时候确实需要它。当然,它也有它的用途的,否则没必要存在。在·Linux的帮助页中说它除了参数扩展和重定向之外不产生任何作用。
man :
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 ~]#
有关shell中冒号的特殊用法
有关shell中冒号的特殊用法,供朋友们参考. : ${VAR:=DEFAULT} 当变量VAR没有声明或者为NULL时,将VAR设置为默认值DEFAULT.如果不在前面加上:命令,那么就会把${VA ...
shell中测试命变量是否已经定义
(1)sehll实例 # cat subshell #!/bin/bash if (set -u; : $var); then #冒号与$间有空格 echo "Variable is set ...
shell中for循环
shell中for循环总结 最常用的就是遍历操作某一类文件,比如批量建索引. for i in `ls` do samtools faidx $i done 注意:for末尾不需要冒号(:),循环的代 ...
脚本乐园 Shell中命令行选项和参数的处理
在Linux的Shell中怎样处理tail -n 10 access.log这样的命令行选项呢?这是被别人问起的一个问题,好好学习了一下,进行总结如下:在bash中,可以用以下三种方式来处理命令行参数 ...
shell中常用的特殊符号
在shell中常用的特殊符号罗列如下: # ; ;; . , / \ 'string'| ! $ ${} $? $$ $* "string"* ** ? : ^ $# $@ `co ...
Shell中特殊符号
http://blog.chinaunix.net/u1/53027/showart.php?id=482234 在shell中常用的特殊符号罗列如下:# ; ;; . ...
shell之冒号的作用
冒号: :在shell中是一种命令,意思是总是为真,但是却不做任何操作,即总是为真的空命令 eg: [root@localhost ~]# ${abc:=t1}-bash: t1: comma ...
Linux shell中的一个问题 ${}带正则匹配的表达式
目前在准备龙芯项目的PMON,在研究其编译过程的时候,看到一些make 语句,百思不得其解.后来在shell编程中看到一点资料,牵扯到Shell中的正则表达式.故记录下来,以备后来查阅. 问题: 在某 ...
shell 中的特殊符号的含义
来源:http://blog.sina.com.cn/s/blog_62a151be0100x9rn.html 第四章 基本功 - 特殊符号 学习撰写 script 最迅速的捷径是观摩别人的 scri ...
随机推荐
Rubinius 2.0 发布,Ruby 虚拟机
Rubinius 2.0 发布了,官方发行说明请看这里. Rubinius是一个运行Ruby程序的虚拟机,其带有Ruby的核心库. Rubinius的设计决定了其调试功能的强大,使得在运行时常规的Ru ...
添加数据源,管理工具--数据源(ODBC),点击添加不显示该驱动
win7系统下或者64位系统下,安装完mysql-connector-odbc驱动后,直接进入:管理工具--数据源(ODBC),点击添加不显示该ODBC驱动 问题解决如下: C:\Users\Admi ...
Sass简介,安装环境,Sass的语法格式及编译调试
什么是 CSS 预处理器? 定义:CSS 预处理器定义了一种新的语言,其基本思想是,用一种专门的编程语言,为 CSS 增加了一些编程的特性,将 CSS 作为目标生成文件,然后开发者就只要使用这种语言进 ...
Ubuntu 14.04—Anaconda 相关
Anaconda 使用国内镜像: https://keyunluo.github.io/2016/07/17/2016-07-17-anaconda-python.html Anaconda下的 De ...
数据库介绍(MySQL安装 体系结构、基本管理)
第1章 数据库介绍及mysql安装 1.1 数据库简介 数据库,简而言之可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据运行新增.截取.更新.删除等操作. 所谓“数据库”系以一定方式 ...
解锁技能:sass + node-sass多页面应用编译(转载)
传送门:https://blog.csdn.net/wx11408115/article/details/78023466
7、zabbix使用进阶(03)
节知识点: zabbix自动发现 web监控 zabbix自动发现 官网:https://www.zabbix.com/documentation/4.0/zh/manual/discovery/ ...
maven基础知识汇总
maven的dependency中scope=compile和provided的区别 对于scope=compile的情况(默认scope),也就是说这个项目在编译,测试,运行阶段都需要这个artif ...
BETA-4
前言 我们居然又冲刺了·四 团队代码管理github 站立会议 队名:PMS 530雨勤(组长) 过去两天完成了哪些任务 整理了一丢丢代码 接下来的计划 认真复习准备考试,挤时间把软工搞定 还剩下哪些 ...
-
shell中的双冒号
2016-03-29 16:03:23shell中经常有“ echo ${a::1}”这种表达式。 其实就是相当于“echo ${a:0:1}, 表示打印字符串种的第0个到第一个字母。 类似于其它语言的substring(a, 0, 1)。 双冒号,只是省略了其中的”0“, 初看会让人迷惑... -
bash Shell 中冒号的作用
2019-12-28 17:15:32冒号是bash shell中一个内建命令,有多种用法 1、空命令,返回永真 就是什么也不做,所以返回码永远都是0。 (1)用于循环条件中表示永真 #!/bin/bash i=0 while : do if ((i >= 10)) then break fi ... -
shell用法大全
2021-12-18 14:26:52一般与 sort 命令结合使用 变量 定义变量 在shell中,定义变量直接就是 name=value shell中没有变量类型,都是字符串 假如要把执行命令的标准输出流弄到变量中去 name=`命令` 例子: name=`ls` 就是将ls输出的内容... -
Bash中冒号(:)的基本用法
2021-05-16 06:52:39Bash中冒号(:)的基本用法:(1)语法占位符,什么都不做就像Python的pass语句,放在那里没有用,但是不放在那里就有语法错误。isInteractiveMode(){:}这样,脚本在执行的时候,就不会出现语法错误。我们可以以后再慢慢... -
【Bash百宝箱】shell内建命令之冒号
2016-09-19 20:29:14在shell中,冒号“:”是一个内建(builtin)命令,格式如下:: [arguments]冒号命令本身没什么副作用,使用场景有限,一般用于参数扩展,有以下几种用法:${parameter:-word} 如果parameter没有设置或者为空,替换为... -
有关shell中冒号的特殊用法
2019-09-23 01:30:51有关shell中冒号的特殊用法,供朋友们参考。 : ${VAR:=DEFAULT} 当变量VAR没有声明或者为NULL时,将VAR设置为默认值DEFAULT。如果不在前面加上:命令,那么就会把${VAR:=DEFAULT}本身当做一个命令来执行,报错是... -
Shell脚本中参数处理方法
2021-01-17 13:11:07'getopt'与'getopts'类似,不过'getopts'只能处理短选项,'getopt'则能处理短选项和长选项。所谓的短选项就是类似下面这样的选项:-a而下面这样的则是长...需要事先说明的一点是,'getopt'不是Shell内建的命令,而是... -
从Bash漏洞学Shell脚本(冒号)
2021-02-04 20:24:36最后我们看一下,这个列子中使用的一个比较不常用的符号 : (冒号)。在Bash里边:是一个占位符。是一个不执行的命令。这个命令对于命令输入不挑食,可以作为注释方法。 没有输出,可以对文件进行清空。 : > test.... -
在bash中使用:-(冒号)
2021-05-16 06:51:56例子:$str=$echo"${str:-default}"default和类似的扩展使用:=,:+和:?所有的食物都有两种味道:有结肠的也有没有结肠的。不同之处在于带着冒号输入为“NULL”。或未设定“,鉴于无冒号,它只是“NULL... -
Shell脚本里的双冒号是什么意思
2019-10-03 15:20:53这个是代码开发风格,其实也...这个是根据Google的Shell开发规范进行定义的。 参考: https://google.github.io/styleguide/shell.xml?showone=Function_Names#Function_Names http://stackoverflow.org.cn/... -
Linux Shell 内建命令:冒号(:)
2021-05-11 00:39:39在Linux系统中,冒号(:)常用来做路径的分隔符(PATH),数据字段的分隔符(/etc/passwd)等。其实,冒号(:)在Bash中也是一个内建命令,它啥也不做,是个空命令、只起到占一个位置的作用,但有时候确实需要它。当然,它也... -
shell getopts用法详解
2021-01-14 09:52:15本文链接:https://blog.csdn.net/u012703795/article/details/46124519获取UNIX类型的选项:unix有一个优点就是标准UNIX命令在执行时都具有相同的命令行格式:command -options parameters如果在执行Shell程序也采用... -
Linux 一学就会 --Shell 教程 || Shell 的基础用法(详细)
2021-12-20 14:53:16Shell是一个命令解释器,它在操作系统的最外层,负责直接与用户进行对话,把用户的输入解释给操作系统,并处理各种各样的操作系统的输出结果,输出到屏幕反馈给用户。这种对话方式可以是交互式也可以是非交互式的 -
SHELL脚本中字符串的截取
2021-01-17 13:10:53cut命令主要是接受三个定位方法:第一,字节(bytes),用选项-b第二,字符(characters),用选项-c第三,域(fields),用选项-f3 以“字节”定位,给个最简单的例子?举个例子吧,当你执行ps命令时,... -
shell字符截取命令之cut命令的实例详解
2020-09-15 07:42:47主要介绍了shell字符截取命令之cut命令的实例详解的相关资料,希望通过本文大家能够掌握这部分内容,需要的朋友可以参考下 -
shell 命令getopts用法
2020-12-24 14:25:06写shell脚本常见sh test.sh-m 2 -d 3的写法事例脚本:#!/bin/bashwhile getopts ":a:b:c:" arg #选项后面的冒号表示该选项需要参数doecho "arg":$argcase $arg ina)echo "a's arg:$OPTARG --- $OPTIND" #参数存在$... -
Shell命令 getopts/getopt用法详解 命令行参数
2021-07-21 15:49:05Shell命令行参数解析getopts/getopt用法详解 在Linux bash中,可以用以下三中方式解析命令行参数: 直接处理:使用$1、$2、$3… 进行解析 getopts:短选项的情况,例如:-n 10 -f file.txt getopt:处理短选项或者... -
[shell]截取字符串
2021-05-15 23:25:30@H_404_0@ shell中截取字符串的方法有很多中,${expression}一共有9种使用方法。${parameter:-word}${parameter:=word}${parameter:?word}${parameter:+word}上面4种可以用来进行缺省值的替换。${#parameter}上面... -
shell 脚本getopts用法总结
2020-12-10 09:08:30getopts是shell命令行参数解析工具,意在从shell ...如果对应的参数后面还跟随一个值,则在相应的optstring后面加冒号。比如a:fs表示a参数后面会有一个值出现,-a value的形式。另外,getopts执行匹配到a的时候,会 -
shell getopts 用法
2021-03-04 10:31:04shell getopts 用法 c语言里面有个getopt_long,可以获取用户在命令下的参数,然后根据参数进行不同的提示或者不同的执行。 在shell中同样有这样的函数或者用法吧,在shell里面是getopts,也有一个getopt是一个... -
Linux Shell脚本系列教程(四):使用函数添加环境变量
2020-09-15 17:12:35主要介绍了Linux Shell脚本系列教程(四):使用函数添加环境变量,本文对环境变量的一知识作了介绍,并给出普通添加环境变量和使用函数添加环境变量的方法,需要的朋友可以参考下 -
linux shell命令行选项与参数用法详解
2020-09-15 20:06:50本文介绍了linux shell中使用命令行选项与命令行参数的方法,在bash中,可以用以下三种方式来处理命令行参数,每种方式都有自己的应用场景 -
shell脚本getopt使用详解
2022-01-17 18:31:35用法: getopt 选项字符串 参数 getopt [options] [--] 选项字符串 参数 getopt [options] -o|--options 选项字符串 [选项] [--] 参数 解析命令选项。 选项: -a, --alternative 允许长选项以单个 - ...