我有以下字符串,
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
答案 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