POSIX sh问题(printf和“ read -n”)

时间:2018-09-24 12:13:07

标签: bash sh posix

我尝试以POSIX方式编写脚本,没有任何批评。我遇到了以下我自己无法解决的问题:

  1. 我知道这是一个愚蠢的问题,但是到目前为止,我还不太了解如何将这两个命令组合在一起。

     printf ' Port: '
     printf %s "$request" | xmllint --xpath 'string(/Server/Port)' -
    

    有可能吗?

  2. 我的脚本中包含以下内容:

     printf '\n\n\nGo? (Y) '
     read -n 1 y
     printf '\n\n'
     case $y in
              y|Y ) printf %s "$request" | xmllint --format - ; printf '\n';;
     esac
    

    但是,在POSIX中,-n中的read -n 1 y未定义。可以用POSIX方式做到吗?

1 个答案:

答案 0 :(得分:0)

要以POSIX方式读取1个字符,可以执行

y=$(dd bs=1 count=1 2>/dev/null)

y=$(head -c 1)也不是POSIX。)有关https://unix.stackexchange.com/questions/464930/can-i-read-a-single-character-from-stdin-in-posix-shell的更多信息

您可以组合

printf ' Port: '
printf %s "$request" | xmllint --xpath 'string(/Server/Port)' -

使用&&;或换行符。

就像chai-t-rex所指出的,

printf ' Port: %s' "$(printf %s "$request" | xmllint --xpath 'string(/Server/Port)' -)"

也是可能的,但不会带来任何好处。它所做的只是稍微重新组织代码,同时由于启动了不必要的命令替换过程而引入了适度的性能低估。