我尝试以POSIX方式编写脚本,没有任何批评。我遇到了以下我自己无法解决的问题:
我知道这是一个愚蠢的问题,但是到目前为止,我还不太了解如何将这两个命令组合在一起。
printf ' Port: '
printf %s "$request" | xmllint --xpath 'string(/Server/Port)' -
有可能吗?
我的脚本中包含以下内容:
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方式做到吗?
答案 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)' -)"
也是可能的,但不会带来任何好处。它所做的只是稍微重新组织代码,同时由于启动了不必要的命令替换过程而引入了适度的性能低估。