shell中如何判定一个字符串里是不是有空格?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell中如何判定一个字符串里是不是有空格?相关的知识,希望对你有一定的参考价值。

就比如我输入的Argument是"1000 1011",我需要判断是否有空格,如果有的话,我要把它分成两部分并传给两个不同的变量,比如$NUM1,$NUM2这样。

#!/bin/bash
S='1000 1011'
echo $S | grep " " >/dev/null 2>&1
if [ $? = 0 ];then
num1=$(echo $S | awk 'print $1')
num2=$(echo $S | awk 'print $2')
echo "NUM1=$num1"
echo "NUM2=$num2"
else
echo "没有空格"
fi
参考技术A S="1000 1011"
if [ "$S/ /" = "$S" ]
then
echo "no space"
else
echo "space"
fi追问

不知道是不是和系统有关,我的是Ubuntu10.04下的system shell
能和我讲一下if那行的意义吗? 比如为什么要作一个赋值操作?
而且这个在我这里似乎不work。

参考技术B s="1100 0110"
b1="$s##* "
b2="$s%% *"
echo b1
echo b2

shell中for循环变量有空格的问题——IFS变量

  • 在使用shell的for循环时,如果循环的字符串中间有空格,那么循环时会自动分割,下面是解决的方法
只需要更改 shell分隔符即可
在for循环之前修改IFS变量,示例:
OLDIFS="$IFS"  #备份旧的IFS变量
IFS=$'\\n'   #修改分隔符为换行符

for i in `cat aaa`  #aaa文件中存放着公钥
do
echo "$i"
done
IFS="$OLDIFS"  #还原IFS变量
  • 注释:

IFS变量的相关信息:

  1. Shell把变量IFS内的每一个字符都当做是一个分割符(delimeter),用这些字符作为每一个字段的结束符来进行分割。
  2. 如果IFS没有设置,或者IFS的值被设置为"\\t\\n"(space, tab和 newline),那么操作对象的开始和结束处的所有space, tab和newline序列都将被忽略,但是操作对象中间的space, tab和newline序列会作为界定符工作。
  3. 如果IFS值不是默认值(例如程序中对IFS进行设置过),只有出现在IFS内的空白字符(可能是space, tab或newline中的一个或几个)才会在单词开始和结束处被忽略,这里说的是单词,而不是整个操作对象。
  4. IFS内的非空白字符多个连续出现时,每个非空白字符会被当做单独的分隔符看待,但是多个连续的空白字符会被当做一个分隔符看待。
  5. 如果IFS为空(“null”),则不会进行单词分割。

以上是关于shell中如何判定一个字符串里是不是有空格?的主要内容,如果未能解决你的问题,请参考以下文章

shell脚本启动 :字符串判空有空格报错:binary operator expected

shell脚本参数中有空格

java执行shell命令中有空格的处理方法

如何判断Excel中是不是有空行

C语言中输入字符串,里面有空格,怎么根据空格把字符串分开,并存在数组里?

如何替换掉字符串里的空格?