Shell_1

Posted LhTian

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell_1相关的知识,希望对你有一定的参考价值。

基础语法

定义变量:
    xxx=""

使用变量:
    echo $xxx  or  echo $xxx

将变量定义为只读:
    xxx=""
    readonly xxx

删除变量:
    unset xxx

字符串:单引,双引,无引都可
    单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
    单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。

    双引号里可以有变量
    双引号里可以出现转义字符

字符串拼接:
    eg:xxx="hello,"$your_name"!"

获取字符串长度:
    echo $#xxx  变量为数组时,$#string 等价于 $#string[0]

提取子字符串:
    echo $string:1:4

查找子字符串:(但好像只能查找第一个)
    echo `expr index "$xxx" iy`
    string="runoob is a great site"
    echo `expr index "$string" io`  # 输出 4

定义数组:
    数组名=(值1 值2 ... 值n)
    单独定义数组中分量:xxx[n]=yyy

读取数组:
    $数组名[下标]
    echo $array_name[@] #读取所有元素

获取数组的长度:
    # 取得数组元素的个数
    length=$#array_name[@]  or  length=$#array_name[*]
    # 取得数组单个元素的长度
    lengthn=$#array_name[n]

注释:  

单行:#
多行:<<EOF
        xxx
        EOF
        
       <<\'
        xxx
        \'

     <<!
        xxx
        ! 

 

Shell中的空格字符串转换

考虑您有一个shell变量foo,其值为

echo $foo
# Output: elementA elementB elementC

现在,我想向元素添加相同的前缀__PREFIX__和后缀__SUFFIX__,以便

echo $new_foo
# Output: __PREFIX__ElementA__SUFFIX__  __PREFIX__ElementB__SUFFIX__  __PREFIX__ElementC__SUFFIX__ 

最简单的方法是什么?


由于我不确定如何调用此类操作,因此标题可能无法正确描述问题。建议非常欢迎!

答案
如果您有

proper数组,

foo=(a b c)
您可以使用/#运算符添加前缀,并使用/%运算符添加后缀。不过,它确实必须分两个步骤进行。

$ foo=(a b c) $ foo=("$foo[@]/#/__PREFIX__") $ foo=("$foo[@]/%/__SUFFIX__") $ declare -p foo declare -a foo=([0]="__PREFIX__a__SUFFIX__" [1]="__PREFIX__b__SUFFIX__" [2]="__PREFIX__c__SUFFIX__")

如果只用空格分隔的字符串,则可以使用//

$ foo="a b c" $ foo="__PREFIX__$foo// /__SUFFIX__ __PREFIX____SUFFIX__" $ echo "$foo" __PREFIX__a__SUFFIX__ __PREFIX__b__SUFFIX__ __PREFIX__c__SUFFIX__

另一答案
使用sed,您可以做:

prefix=__PREFIX__ suffix=__SUFFIX__ new=$(sed -E "s/(\S)(\s|$)/\1$suffix /g;s/(\s|^)(\S)/$prefix\2/g" <<< $foo)

输出:

__PREFIX__elementA__SUFFIX__ __PREFIX__elementB__SUFFIX__ __PREFIX__elementC__SUFFIX__

另一答案
这是一种易于阅读的方法,但是从效率的角度来看,这可能是最糟糕的方法。

foo="elementA elementB elementC" PREFIX=__PREFIX__ SUFFIX=__SUFFIX__ for f in $foo do new_foo="$new_foo $PREFIX$f$SUFFIX" done echo $new_foo

以上是关于Shell_1的主要内容,如果未能解决你的问题,请参考以下文章

1.shell编程-变量的高级用法

未找到:https://repo1.maven.org/maven2/org/jetbrains/sbt-idea-shell_2.12_1.0/2017.2/sbt-idea-shell-2017.

Shell_1 简介

shell脚本常用命令(HandBook_1)

028_shell脚本递归求值

shell练习