为什么我的 csh 脚本不能处理特殊字符?
Why is my csh script not working with special characters?
#!/bin/csh -f
foreach line ("`cat test`")
set x=`echo "$line" | awk '{split([=10=], b, " "); print b[1]}'`
echo "$x"
end
测试文件包含以下内容:
How to Format
Stack[7] Overflow
Put returns between paragraphs
在执行脚本时出现以下错误:
set: No match.
如何将包含方括号[]
等特殊字符的字符串存储到变量中,然后在代码中使用它们?
问题是你在做:
set x = [some string with shell globbing characters]
由于 set x = foo
有效但 set x = [foo]
无效的相同原因,这将无效。您需要使用 set x = "[foo]"
(或 '[foo]'
)来转义特殊的 shell 通配字符(在本例中为 [
和 ]
)。
在 C shell 中嵌套引号非常困难,这也是 it's generally discouraged to use the C shell for scripting 的原因之一。你的命令也许是可能的,但我不够聪明(或太懒)弄清楚如何。我的解决方案通常是设置特殊的 noglob
变量以防止扩展字符:
set noglob
foreach line ("`cat test`")
set x = `echo "$line" | awk '{split([=11=], b, " "); print b[1]}'`
echo "$x"
end
输出:
How
Stack[7]
Put
P.S。有一种更简单的方法来回显每行的第一个单词;将其放入列表中:
set noglob
foreach line ("`cat test`")
set x = ($line)
echo "$x[1]"
end
#!/bin/csh -f
foreach line ("`cat test`")
set x=`echo "$line" | awk '{split([=10=], b, " "); print b[1]}'`
echo "$x"
end
测试文件包含以下内容:
How to Format Stack[7] Overflow Put returns between paragraphs
在执行脚本时出现以下错误:
set: No match.
如何将包含方括号[]
等特殊字符的字符串存储到变量中,然后在代码中使用它们?
问题是你在做:
set x = [some string with shell globbing characters]
由于 set x = foo
有效但 set x = [foo]
无效的相同原因,这将无效。您需要使用 set x = "[foo]"
(或 '[foo]'
)来转义特殊的 shell 通配字符(在本例中为 [
和 ]
)。
在 C shell 中嵌套引号非常困难,这也是 it's generally discouraged to use the C shell for scripting 的原因之一。你的命令也许是可能的,但我不够聪明(或太懒)弄清楚如何。我的解决方案通常是设置特殊的 noglob
变量以防止扩展字符:
set noglob
foreach line ("`cat test`")
set x = `echo "$line" | awk '{split([=11=], b, " "); print b[1]}'`
echo "$x"
end
输出:
How
Stack[7]
Put
P.S。有一种更简单的方法来回显每行的第一个单词;将其放入列表中:
set noglob
foreach line ("`cat test`")
set x = ($line)
echo "$x[1]"
end