我的文件中包含以下命令。
#!/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]测试
测试[单一空间]测试
当我将值设置为?
时,双空格如何被单个空格替换感谢任何帮助。
答案 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 字符序列用于分隔单词。