我遇到了将awk输出保存到变量并保留输入的问题。我有一个以制表符分隔的文件ABC.txt,格式如下:字段1 = a,字段2 = A B <-字母A和B之间的2个空格,字段3 = c
set text = `awk -F "t" '{print $2}' ABC.txt`
echo $text
A B <- 1 space between the letters A and B,
echo "$text"
A B <- 1 space between the letters A and B,
我需要一个解决方案,其中变量保留多个空格(我看到的实例中,可以有两个或三个连续的空格):
echo $text = A B <-字母A和B之间2个空格,
或
回声"text"美元;= A B <-字母A和B之间间隔2个空格,
在CSH中,为了保留空格,需要对变量展开符和进行双引号backticks-expression;一个简单的例子是:
set text = "`echo 'A B'`"
echo "$text"
A B
但是与POSIX兼容的shell不同,CSH不会为命令替换(也称为。backticks-expressions);一旦对它加双引号,转义规则就变成了周围双引号的转义规则:
- 没有反斜杠转义。
- 不能使用
"
. $
启动变量扩展`
启动命令替换。- 等等…?
将这些字符包含为字面值的方法在双引号内实际上是从在外附加它们:关闭周围的双引号,附加字符(使用反斜杠转义或在单引号内),然后重新打开双引号;shell将为您处理连接。
例子:
echo "..."""..."
echo "..."$"..."
echo "..."`"..."
echo "..."'"'"..."
echo "..."'$'"..."
echo "..."'`'"..."
这两个输出:
..."...
...$...
...`...
当awk -F "t" '{print $2}' ABC.txt
的命令替换双引号时,您需要做的是:
set text = "`awk -F """t""" '{print "$"2}' ABC.txt`"
echo "$text"
A B
顺便说一句,使用awk -F "t"
没有意义,使用awk -F 't'
更容易:
set text = "`awk -F 't' '{print "$"2}' ABC.txt