作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我写了一个脚本来获取顶级 session PID,即 session 启动器,它可能是 bash、dash、ksh 甚至 systemd 之类的 shell。该脚本可能会获得一个 PID 作为初始参数,但是我需要对其进行过滤以检查它是否是一个有效的整数,而不是像 34fg45
、-5467
这样的东西,我不知道希望它以零开头,例如 05467
。
这是脚本的一个片段。
if [ "$1" != "" ]; then
if [[ "$1" == [1-9]*([0-9]) ]]; then <- Check for Integer; error here in non bash shell
if ps -p $1 -o "pid=" >/dev/null 2>&1; then
pid=$1
else
echo "PID $1, no such process." >&2
exit 1
fi
else
echo "Invalid pid." >&2
exit 1
fi
else
pid=$$
fi
代码在 bash 中运行,但在 dash 上运行失败并出现语法错误:
./tspid: 16: ./tspid: Syntax error: "(" unexpected (expecting "then")
据我了解
if [[ "$1"=~ ^[0-9][1-9]*$ ]];
使用 =~
进行正则表达式匹配,并且if [[ "$1"== [1-9]*([0-9]) ]];
使用 ==
进行模式匹配
最佳答案
使用case conditional construct .每个 POSIX shell 都有它,与双括号不同,它看起来并不可怕。
# make sure 0-9 is literally 0 to 9
LC_COLLATE=C
# assume set -u is not in effect or $1 is set
case $1 in
('')
# handle empty argument
;;
(0*|*[!0-9]*)
# handle invalid PID (0, 042, 42a, etc.)
;;
(*)
# handle valid PID
;;
esac
# restore LC_COLLATE if necessary
关于bash - 可移植地过滤掉无效的 PID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62493652/
我正在编写一个快速的 preg_replace 来从 CSS 中删除注释。 CSS 注释通常有这样的语法: /* Development Classes*/ /* Un-comment me for
使用 MySQL,我有三个表: 项目: ID name 1 "birthday party" 2 "soccer match" 3 "wine tasting evening" 4
我是一名优秀的程序员,十分优秀!