我正在尋找與bash中的方括號進行比較。如何在Bash中比較包含方括號的字符串
情況:我有一個包含主機名,看起來像
[debian]
ansible
host
names
[centos]
more
hosts
現在我想掃描所有主機的SSH密鑰(第一回音,後來使用ssh-鍵掃描)hosts文件:
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或其他字符串替換方法,然後才能比較字符串-if可能。有人知道如何比較bash中的字符串中的方括號嗎?
而且不工作: this solution,適應比較(也許我適應了錯誤的方式?):
if [[ $hostName != "" ]] && [ "$hostName" != "*[*" ]
看起來你聯繫將有助於在第一頁上另一個答案:https://stackoverflow.com/a/16263820/1354854。解決方案是'if [[$ hostName!= *「[」*]]'。通配符必須放在引號之外,這是不直觀的,或者因爲您正在使用'[['。 – bnaecker
呵呵,沒有看到那個。好的,這很有用:)。 – guz4217