我有一个名为Try1.txt的文件,其中包含字符串"结束日期:1/1/2014"
我有一个名为Try2.txt的文件,其中包含字符串"结束日期:"
我有一个名为myscript.sh的bash脚本,其中包含以下代码:
$ myscript.sh Try1.txt
这可以按预期工作。
$ myscript.sh Try2.txt
这不能按预期工作。
我也尝试将它与""和" "得到了相同的结果。
为什么它认为字符串不为空或为空?
END_DATE=$(grep "End Date" $1 | gawk -F":" '{print $2}' | sed -e 's/^[ \t]*//g')
if [ -n "${END_DATE##+([[:space:]])}" ];
then
echo "END_DATE is not null or space"
printf "END_DATE: %b\n" "$END_DATE"
else
echo "what is it then?"
printf "END_DATE: %b\n" "$END_DATE"
fi
if [ -n "$END_DATE" ]
then
echo "END_DATE is not null"
else
echo "END_DATE is null"<br>
fi
答案 0 :(得分:1)
尝试if [ -z "$END_DATE" ]
-z必须用于NULL检查
答案 1 :(得分:1)
在bash中你可以这样做:
if [[ ! $END_DATE ]]
这是有效的,因为空字符串是假的。
请注意,我使用的是[[ ]]
语法,而不是[ ]
。阅读差异here
endDate=$(grep -Pom 1 'End Date\s+:\s+\K.*' "$1")
if [[ $? = 0 ]]; then # $? is the return status of a previous command. Grep will return 0 if it found something, and 1 if nothing was found.
echo "Date was found. Date=$endDate"
else
echo 'Date was not found'
fi
这样您甚至不需要sed
或awk
或其他任何内容
我还添加了'-m 1'以确保只找到一行。 "$1"
周围的引号至关重要。