破折号打印扩展命令

破折号打印扩展命令

跑步跟踪或者设置-x使用 Bash 将打印扩展命令:

$ bash -xc 'touch "alfa bravo"'
+ touch 'alfa bravo'

然而,Dash 不会打印实际运行的命令:

$ dash -xc 'touch "alfa bravo"'
+ touch alfa bravo

打印的命令看起来创建了 2 个文件,而该命令实际上创建了 1 个文件。 Dash 可以打印实际运行的命令吗?

答案1

这是一个非常糟糕的解决方法,但似乎可以解决问题:

BEGIN {
  w = "\47"
  while (++i < ARGC) {
    x = split(ARGV[i], y, w)
    for (each in y) {
      if (y[each] ~ /[^[:alnum:]%+,./:=@_-]/)
        printf w y[each] w
      else
        printf y[each]
      if (each < x)
        printf "\\" w
    }
    if (i == ARGC - 1)
      printf RS
    else
      printf FS
  }
}

结果:

$ awk -f charlie.awk touch "alfa bravo"
touch 'alfa bravo'

$ awk -f charlie.awk touch 'alfa"bravo'
touch 'alfa"bravo'

$ awk -f charlie.awk touch "alfa'bravo"
touch alfa\'bravo

相关内容