[英]Comparing strings not to match in bash
我有一個變量,應包含一個或其他字符串值或退出程序。
第一個似乎對我有用:
[ !"$JOB_FILE" == "all_jobs.pl" ] || [ !"$JOB_FILE" == "incomplete.out" ] && { echo -e "\n Only all_jobs.pl or incomplete.out are valid job files\n"; exit 127 ; }
但是,第二個沒有:
[ "$JOB_FILE" != "all_jobs.pl" ] || [ "$JOB_FILE" != "incomplete.out" ] && { echo -e "\n Only all_jobs.pl or incomplete.out are valid job files\n"; exit 127 ; }
這兩個不相等的定義之間有什么區別?
這些是正確的形式:
[ ! "$JOB_FILE" == "all_jobs.pl" ] && [ ! "$JOB_FILE" == "incomplete.out" ] && {
echo -e "\n Only all_jobs.pl or incomplete.out are valid job files\n"
exit 127
}
[ "$JOB_FILE" != "all_jobs.pl" ] && [ "$JOB_FILE" != "incomplete.out" ] && {
echo -e "\n Only all_jobs.pl or incomplete.out are valid job files\n"
exit 127
}
而在Bash中,這樣做更好:
[[ $JOB_FILE != "all_jobs.pl" && $JOB_FILE != "incomplete.out" ]] && {
echo -e "\n Only all_jobs.pl or incomplete.out are valid job files\n"
exit 127
}
或這個:
shopt -s extglob ## Not necessary on Bash 4.1 or newer.
[[ $JOB_FILE != @(all_jobs.pl|incomplete.out) ]] && {
echo -e "\n Only all_jobs.pl or incomplete.out are valid job files\n"
exit 127
}
也可以使用regex
但更難逃脫。
看來您有邏輯錯誤。 如果兩個語句都為真,則要執行回顯,但是您正在使用||
。 您的真正意思是使用&&
。
if [[ "$JOB_FILE" != "all_jobs.pl" && "$JOB_FILE" != "incomplete.out" ]]; then
echo -e "\n Only all_jobs.pl or incomplete.out are valid job files\n"
exit 127
fi
一種方法是寧願檢查文件名是否為預期的文件名,並使用邏輯或鏈接條件:
[ "$JOB_FILE" = "all_jobs.pl" ] || [ "$JOB_FILE" = "incomplete.out" ] || { echo -e "\n Only all_jobs.pl or incomplete.out are valid job files\n"; exit 127 ; }
邏輯是相反的。
您要檢查JOB_FILE
是“ A”還是“ B”。 在其他情況下,請打印錯誤消息。
JOB_FILE status
A ok
B ok
rest error
於是
A B (A or B) !(A or B) !A or !B !A and !B
1 0 1 0 0 or 1 => 1 0 and 1 => 0
0 1 1 0 1 or 0 => 1 1 and 0 => 0
0 0 0 1 1 or 1 => 1 1 and 1 => 1
--------------------------------------------------------------
always true just true if not A and not B
其中1=True
, 0=False
。
了解了邏輯之后,您需要的是:
[ ! "$JOB_FILE" == "all_jobs.pl" ] && [ ! "$JOB_FILE" == "incomplete.out" ] && { echo ... }
^^
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.