shell内置重要命令

built-in commands

  1. alias/unalias function/unset -f

    首先要说的就是在shell中怎么写函数,当然了立马会想到function,这种one liner的写法只有在zsh中才可以使用,在bash中不能写在一行

    1
    2
    3
    4
    5
    6
    7
    function autoline(){for ((i=0;i<`tput cols`;i++));do echo -n "=";sleep 0.001;done}

    # 可以使用unset -f来删除删除定义
    unset -f autoline

    # 如果需要处理参数,那么只有function可以做到。
    function get(){a=$@;echo "length:${#a}"}

    其实alias也可以做到,实质都是对代码段的引用,但是alias写的需要source之后才能使用

    1
    2
    3
    4
    5
    alias autoline="for ((i=0;i<`tput cols`;i++));do echo -n "=";sleep 0.001;done"
    # 对于简单的,不需要传参的,两种调用效果相同
    autoline
    # 可以使用unalias来取消alias定义
    unalias autoline
  1. :占位

    之前在写if语句的时候就遇到过需要类似python中pass的效果,但是shell中没有pass,不过冒号可以做到

    1
    2
    3
    4
    if [ ${a} > 3 ];then
    :
    else
    a=6
  2. local

    设置局部变量,仅在函数内部有效,function中有效,alias没效果

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    a=3
    function pt(){
    local a=6
    echo $a
    }
    pt
    echo $a

    6
    3
  3. type查看是一个alias还是一个function/built-in/executable等

  4. set -C,禁止复写

    set的一个重要作用,set是用来对shell做一些设置的,可设置shell的属性。使用-设置属性,使用+取消属性。

    1
    2
    3
    4
    5
    6
    7
    #在shell中避免清空存在的文件开启set -C
    #!bin/bash

    echo "123" > 2.txt
    set -C
    echo "456" > 2.txt
    # 运行脚本会报错,无法写入。只能追加
  5. unset,取消设置的变量,与set的作用完全不同

    1
    2
    3
    a=1
    unset a
    echo $a