【发布时间】:2018-02-24 04:43:49
【问题描述】:
我正在寻找与 bash 中方括号的比较。
情况:我有一个主机文件,其中包含看起来像
的主机名[debian]
ansible
host
names
[centos]
more
hosts
现在我想扫描所有主机的 ssh 密钥(首先回显,稍后使用 ssh-keyscan):
while read hostName
do
if [[ $hostName != "" ]] && [[ $hostName != "\[*" ]] ; then
echo $hostName
#ssh-keyscan $hostName
fi
done < hosts
虽然[[ $hostName != "" ]] 可以完成,但包含方括号[[ $hostName
!= "\[*" ]] 比较的部分却没有。 atm结果如下:
[debian]
ansible
host
names
[centos]
more
hosts
我希望它看起来像:
ansible
host
names
more
hosts
虽然例如How to compare strings in Bash 涵盖了一般主题,它不涵盖我的问题。另外,如果可能的话,我想避免在比较字符串之前使用 sed 或其他字符串替换方法。有人知道如何在 bash 中比较字符串中的方括号吗?
同样不工作: this solution,改编比较(可能是我改编错了?):
if [[ $hostName != "" ]] && [ "$hostName" != "*[*" ]
【问题讨论】:
-
看起来您链接的第一页上的另一个答案会有所帮助:stackoverflow.com/a/16263820/1354854。解决方案是
if [[ $hostName != *"["* ]]。通配符必须在引号之外,这不直观,或者因为您使用的是[[,所以完全不加引号。 -
呵呵,没看到那个。好的,非常感谢:)。