从Bash的字符串中捕获前4个字符和后4个字符?

时间:2018-03-04 04:44:12

标签: bash

我有以下字符串,

szTemp="23.4 78.9"

我想把它分成两个较小的字符串,

szIndoorTemp="23.4"
szOutdoorTemp="78.9"

然而,这样做,

szIndoorTemp=${szTemp::-5}
szOutdoorTemp=${szTemp::5}

不会产生此错误并导致脚本崩溃。 另外,当我做的时候

echo $szTemp 

我得到了

23.4
78.9

我怀疑这可能意味着字符串中有回车符。

更新 这可能很接近......

#!/bin/bash

szTemps="23.4 67.8"

szIndoorTemp=${szTemps:0:4}
szOutdoorTemp=${szTemps:5}

echo $szIndoorTemp
echo $szOutdoorTemp

4 个答案:

答案 0 :(得分:1)

我想如果我在这里得到它-5可能是罪魁祸首,当我运行你提到的命令时,我看到以下错误:

szIndoorTemp=${szTemp::-5}
bash: -5: substring expression < 0

但当我从-5更改为5时,它会飞得如下:

szIndoorTemp=${szTemp::5}
echo $szIndoorTemp
23.4

答案 1 :(得分:1)

我不依赖于确切的字符数,而是依赖于空格作为分隔符:

read szIndoorTemp szOutdoorTemp <<< "$szTemp"

作为替代方案,您可以这样做:

read szIndoorTemp szOutdoorTemp < <(yourPythonScript)

答案 2 :(得分:0)

Try this...

$ cat example.sh 

szTemp="23.4 78.9"
echo "szIndoorTemp=${szTemp:0:4}"
echo "szOutdoorTemp=${szTemp:(-4)}"

$ sh example.sh 

szIndoorTemp=23.4
szOutdoorTemp=78.9



You can also try this, if it works for you..

$ cat example.sh

szTemp="23.4 78.9"
szarray=($szTemp)
echo "szIndoorTemp=${szarray[0]}"
echo "szOutdoorTemp=${szarray[1]}"


$ sh example.sh 

szIndoorTemp=23.4
szOutdoorTemp=78.9

答案 3 :(得分:-1)

我在〜/ .bashrc中使用了filter,一个函数,因为我经常需要它,简单的awk-solution对我来说太复杂了:):

echo "23.4 78.9" | filter 1 2
23.4    78.9

并且过滤器按照索引从指定的顺序选择参数,从1开始计算:

filter () 
{ 
    declare -a arr;
    while read val; do
        arr=($val);
        for param in "$@";
        do
            echo -n -e ${arr[$param-1]} "\t";
        done;
        echo;
    done
}

用法:

echo "23.4 78.9" | filter 1
23.4
echo "23.4 78.9" | filter 2
78.9

awk中的等效操作是:

echo $szTemp | awk '{print "$1"}'
23.4
echo $szTemp | awk '{print "$2"}'
78.9

但是花括号很难在德国键盘上打字;我想我们有äüöß字符,其中英文键盘有{}

变量赋值变为:

first=$(echo "23.4 78.9" | filter 1)
23.4
second=$(echo "23.4 78.9" | filter 2)
78.9