" 双引号,双引号里面的变量一般会被解析成赋值的内容。比如字符串拼接
name=frank
echo "hello $name" # hello frank
> ,&>, >&, >> 这四个都是重定向符,分别举例说明。
cat ~/a.txt >a.log
将文件a.txt的内容输出到文件a.log中去,如果文件存在则覆盖;
command &>filename
重定向command的标准输出(stdout)和标准错误(stderr)到文件filename中,一般用于启动进程脚本;
command >&2
把command的标准输出(stdout)重定向到标准错误(stderr)中;
cat ~/a.txt >> a.log
把a.txt的输出以追加得方式输入到文件a.log中,如果文件不存在则创建。
**双星号,算术运算中表示求幂运算。比如
let "a=3**2"
echo $a #9
{xxx,yyy,zzz} 有人叫花括号扩展,举几个例子,注意不能有空格。
echo {a,b,c}-{d,e,f} # a-d a-e a-f b-d b-e b-f c-d c-e c-f
cat {test111.txt,test222.txt} >test333.txt # 把test111.txt与test222.txt的内容全部追加到test333.txt
cp test333.{txt,txt.bakup} #拷贝test333.txt成test333.txt.backup
{a…z},{0…6}
echo {a..z} # a b c d e f g h i j k l m n o p q r s t u v w x y z
echo {0..6} # 0 1 2 3 4 5 6
匿名函数,会将test333.txt的前两行内容赋值给变量line1和line2;
fileline=./test333.txt
{
read line1
read line2
}<$fileline
echo $line1
echo $line2
高级操作
在xargs -i中,还可以作为文本的占位符,用来标记输出文本的位置。会把所有txt文件拷贝一份,命名成txt.bak
ls *.txt | xargs -i -t cp {} {}.bak
{} ; 表示路径名字。一般跟find命令一起使用。找出所有sh脚本,然后删除。注意{} 和 \ 之间的空格,分号必须存在。
find . -name "*.sh" -exec rm {} \;
用于大小写转化。看下面的例子。
var=hellFrank
echo ${var^} # HelloFrank
echo ${var^^} # HELLOFRANK
<< 双小于号,称作 here-doc。一般用于给命令提供输入多行内容。比如
如果给here doc 标识符加上双引号或者单引号则会禁止变量替换。比如
如果给here doc 标识符加上双引号或者单引号则会禁止变量替换。比如
再 <<后面添加-,可以忽略TAB空白字符。比如
设置默认值,如果param没有设置,则使用默认值,例如
parma=frank
echo ${param:=default} #frank
echo ${test:=default} #default
<<< 三个小于号,称作here string,here doc的变种。比here doc更灵活。例如
tr a-z A-Z <<<"Yes it is a string" # YES IT IS A STRING
name=frank
# 双引号里面会解析变量
tr a-z A-Z <<<"Yes i'm $name" # YES I'M FRANK
# 单引号里面不解析变量
tr a-z A-Z <<<'Yes i\'m $name' # YES I'M $NAME