Linux Shell 内建命令:冒号(:)
https://blog.csdn.net/honghuzhilangzixin/article/details/7073312/
在Linux系统中,冒号(:)常用来做路径的分隔符(PATH),数据字段的分隔符(/etc/passwd)等。其实,冒号(:)在Bash中也是一个内建命令,它啥也不做,是个空命令、只起到占一个位置的作用,但有时候确实需要它。当然,它也有它的用途的,否则没必要存在。在·Linux的帮助页中说它除了参数扩展和重定向之外不产生任何作用。
gnu 帮助:http://www.gnu.org/software/bash/manual/bash.html#Bourne-Shell-Builtins
冒号(:)的作用
1)空命令。
2)参数扩展。
3)重定向。
4)当注释使用。
理解冒号(:)
1)理解空命令。空命令就是什么也不做,所以返回码永远都是0。虽说是空命令,但仍是命令,就具备一般命令应有的特征,可以象一般命令一样使用。如
[root@localhost test]# :
[root@localhost test]# echo $? [root@localhost test]#
可以直接在console中执行。返回码为0。
利用这一特性,:可以当true使用。如用在while等循环体中的条件判断。
2)理解参数扩展。
冒号引起的参数扩展,意思是将参数的值替换为新的值。一般有以下几种参数扩展用法:
${parameter:-word} 如果parameter没有设置或者为空,替换为word;否则替换为parameter的值
${parameter:+word} 如果parameter没有设置或者为空,不进行任何替换;否则替换为word。
${parameter:=word} 如果parameter没有设置或者为空,把word赋值给parameter。实际parameterd的值真的被替换了,这就是=号的意思。不能用这种方式指派位置参数或特殊参数的值。
${parameter:?word} 如果parameter没有设置或者为空,把word输出到stderr,否则替换为parameter的值。
-、+、? 实际parameter的值并不被修改,扩展只是临时显示成word的值。准确的讲,扩展实际替换的是参数的显示,而不是参数的定义。只有=,才是替换参数的定义。
${parameter:offset} 扩展为parameter中从offset开始的子字符串。
${parameter:offset:length} 扩展为parameter中从offset开始的长度不超过length的字符。
原文:https://blog.csdn.net/ieearth/article/details/52589020
* word前的“-”可以理解为“没定义,则替换成word”;“+”可以理解为“有定义,则替换成word”。
* word前的“?”可以理解为“参数到底定义了没,没定义,把word当错误消息打印出来。”
$ foo=hellobash
$ echo ${foo}
hellobash
$ echo ${foo:-newword}
hellobash
$ echo ${foo}
hellobash
$ echo ${foo:+newword}
newword
$ echo ${foo}
hellobash
$ echo ${foo:?newword}
hellobash
$ echo ${foo}
hellobash
$ echo ${foo:=newword}
hellobash
$ echo ${foo}
hellobash
$ unset foo
$ echo ${foo} $ echo ${foo:-newword}
newword
$ echo ${foo} $ echo ${foo:+newword} $ echo ${foo} $ echo ${foo:?newword}
bash: foo: newword
$ echo ${foo} $ echo ${foo:=newword}
newword
$ echo ${foo}
newword
$ echo ${foo:}
wword
$ echo ${foo::}
wwo
---------------------
以上例子转自https://blog.csdn.net/ieearth/article/details/52589020
三元运算符
$ var=
$ (($var>?var++:var--))
3)重定向
: > test.file cat test.file
cat 文件,什么也没有。
4)当注释用
使用冒号还可以用作注释行的开始,但是如果有语法错误,仍将报错,这一点与使用#号不同。如:
[root@localhost test]# cat test.sh fun()
{
echo
: cccccc
# llllll
echo
} fun [root@localhost test]# sh test.sh
Linux Shell 内建命令:冒号(:)的更多相关文章
- Bash Shell内建命令和保留字
Bash Shell内建命令和保留字命令含义!保留字,逻辑非:不做任何事,只做参数展开.读取文件并在shell中执行它alias设置命令或命令行别名bg将作业置于后台运行bind将关键字序列与read ...
- Linux - Bash shell的功能;内建命令type
命令编修能力 (history): bash 的功能里头,相当棒的一个就是『他能记忆使用过的命令!』 这功能真的相当的棒!因为我只要在命令列按『上下键』就可以找到前/后一个输入的命令!而在很多 dis ...
- Linux 内建命令和系统命令
shell内建命令是指bash(或其它版本)工具集中的命令.一般都会有一个与之同名的系统命令,比如bash中的echo命令与/bin/echo是两个不同的命令,尽管他们行为大体相仿.当在bash中键入 ...
- Shell脚本之四 内建命令
所谓 Shell 内建命令,就是由 Bash 自身提供的命令,而不是文件系统中的某个可执行文件. 可以使用 type 来确定一个命令是否是内建命令: [root@localhost ~]# type ...
- BASH BUILTIN COMMANDS 内建命令
除非另外说明,这一章介绍的内建命令如果接受 - 引导的选项,那么它也接受 -- 作为参数,来指示选项的结束 : [arguments] 没有效果:这个命令除了扩展 arguments 并且作任何指定的 ...
- 6 shell内置命令
知识点1:什么是shell内建命令? Shell 内建命令,就是由 Bash 自身提供的命令,而不是文件系统中的某个可执行文件. 内建命令与普通命令的性质是不一样的,内建命令并不是某个外部文件,只要在 ...
- Linux编程 10 (shell外部命令与内建命令,alias ,type命令)
一. 内部命令 Linux命令有内部命令(内建命令)和外部命令之分,内部命令和外部命令功能基本相同,但也有些细微差别.内部命令不需要使用子进程来执行,它们已经和shell编译成一体,作为shell工 ...
- shell的内建命令和外部命令
shell的内建命令和外部命令 Shell执行的命令可以分为内建命令(built-in)和外部命令(external),前者是构建在shell内部:后者是一个独立的文件(可以是二进制文件,也可以是一个 ...
- 自学Linux Shell5.2-shell内建命令history alias
点击返回 自学Linux命令行与Shell脚本之路 5.2-shell内建命令history alias 外部命令:有时称为文件系统命令,是存在于bash shell之外的程序,通常位于/bin./u ...
随机推荐
- Linux配置IP,安装yum源
ip addr 查看IP地址 通过 ip 命令加参数 addr 则是查看当前网卡的配置信息, 从下图中可以看出, 当前系统的 ens33 网卡并没有 ipv4 及 ipv6, 没有 ip地址 则只能说 ...
- c#day03
c#中的随机数 Random random = new Random(); //随机1~200之间的一个数 random.Next(,); //怪兽:防御为10,血量为10 //玩家:随机8~12的攻 ...
- python类的全面介绍
转载:全面介绍python面向对象的编程——类的基础 转载:类的实例方法.静态方法.类方法的区别
- 移植vsftpd到arm linux
vsftpd即very secure FTP daemon(非常安全的FTP进程),是一个基于GPL发布的类UNIX类操作系统上运行的服务器的名字(是一种守护进程),可以运行在诸如Linux.BSD. ...
- 01-Socket服务器
package com.day1; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOExc ...
- Java程序---多数字求和
题目: 编写一个程序,此程序从命令行接收多个数字,求和之后输出结果. 设计思想: 1.记录要输入的数字的个数n 2.建立一个长度为n的数组存储输入的数字 3.累加求和并输出结果 注:此程序中应用了Sc ...
- MySQL--局域网、外网访问MySQL
一.局域网.外网访问 1. 打开CMD,导航到当前MySQL的bin路径,如下图: 2. 访问MySQL:输入MySQL -u root -p,点击Enter键,即可看到密码输入框: 输入密码,点需E ...
- C#提取双引号中的字符串
public static void Main(string[] args) { string strtmp = "123\"456\"qqq\"789\&qu ...
- jQuery操作标签
jQuery操作标签 样式操作: 对标签的样式进行修改,那么操作样式的方法是什么? 样式类: addClass();// 添加指定的CSS类名. removeClass();// 移除指定的CSS类名 ...
- 认识下java注解的实现原理
1,什么是注解 注解也叫元数据,例如常见的@Override和@Deprecated,注解是JDK1.5版本开始引入的一个特性,用于对代码进行说明,可以对包.类.接口.字段.方法参数.局部变量等进行注 ...