双空格自动替换为单个空格

时间:2015-01-16 11:24:59

标签: csh

我的文件中包含以下命令。

#!/bin/csh -f
echo "test  test"  //echo test [dobule space] test
set a = "test  test"  //set a = test [dobule space] test
echo $a

输出如下。

测试[dobule space]测试

测试[单一空间]测试

当我将值设置为?

时,双空格如何被单个空格替换

感谢任何帮助。

2 个答案:

答案 0 :(得分:6)

  

当我将值设置为?

时,双空格如何被单个空格替换

不,它不会被单一空间取代。这是因为您在echo中没有使用引号。使用:

echo "$a"

获得双倍间距的字符串。

如果您不引用变量,则默认情况下,Shell会将多个空格分割为单个空格。即使这将是单一空间:

s='a     b'
echo $s
a b

但引用:

echo "$s"
a     b

编辑:根据以下评论,您可以在csh中执行此操作:

set QUERY = "select p.path from path p, file f where p.pathid=f.pathid and f.fileid=1234"
set dir = "`/usr/etc/venture/bin/mysql -BN -uroot -***** ****-e '$QUERY'`"
echo "$dir" 

答案 1 :(得分:0)

bash中,除非引用该值,否则命令行上的任何空格字符运行都默认由单个空格替换。

bash man page告诉了这一点,但是以一种非常迂回的方式:

“报价”部分:

  

用单引号括起字符可保留引号中每个字符的字面值。

     

用双引号括起字符会保留引号内所有字符的字面值,但$,`,\除外,并且,当启用历史记录扩展时,!

......这意味着空白字符!事实证明,它们是“特殊的”:

“分词”部分:

  

如果 IFS 未设置,或其值正好是<space><tab><newline>,则为默认值,然后是<space><tab><newline>的序列在先前扩展的结果的开头和结尾被忽略,并且任何不在开头或结尾的 IFS 字符序列用于分隔单词。