关于linux:这是ksh中的字符串

Here strings in ksh

以下脚本有什么问题?

1
2
3
#!/bin/bash
a="\\\"P1\\\"\\\"P2\\\"\\\"P3\\\"\\\"P4\\\"\\\"P5\\\""
awk 'BEGIN{FS=OFS="\\\\\\\\\\\""} {$10="";NF-=2}1' <<<"$a"

输出:

1
\\\"P1\\\"\\\"P2\\\"\\\"P3\\\"\\\"P4\\\"

它在bash中工作,但是我在ksh中进行了测试,并收到以下错误消息:

1
2
3
4
#!/usr/bin/ksh
a="\\\"P1\\\"\\\"P2\\\"\\\"P3\\\"\\\"P4\\\"\\\"P5\\\""
b=$(awk 'BEGIN{FS=OFS="\\\\\\\\\\\""} {$10="";NF-=2}1' <<<"$a")
 .sh: syntax error: `< ' unexpected

我在ksh shell中遇到问题,但这可以工作

1
b=` echo $a | sed -e 's/\\\\\"[^"]*\\\\\"$//g' `


改为在此处使用文档:

1
2
3
awk 'BEGIN{FS=OFS="\\\\\\\\\\\""} {$10="";NF-=2}1' <<EOD
$a
EOD


此处的字符串语法<<<ksh不支持的bash功能。只需将命令更改为:

1
b=$(echo"$a" | awk 'BEGIN{FS=OFS="\\\\\\\\\\\""} {$10="";NF-=2}1')

您可能正在使用ksh88或某些ksh克隆。

发布的代码在当前的ksh版本中可以正常工作,并且当前的含义是,它比2002年发布的ksh93m+版本新。