使用以下代码,我希望检查数组中的每个索引是否为空值,空字符串或仅包含空格的字符串。但它没有用。
test=( "apple" "orange" " ")
for i in ${test[@]};
do
if [ -z "$i" ]; then
echo "Oh no!"
fi
done
它永远不会进入if块。我做错了什么?
答案 0 :(得分:1)
您的脚本中有几处错误
for i in ${test[@]};
,其间只有空格的元素被shell忽略-z
选项只检查空字符串而不是带空格的字符串你需要,
test=( "apple" "orange" " ")
for i in "${test[@]}";
do
# Replacing single-spaces with empty
if [ -z "${i// }" ]; then
echo "Oh no!"
fi
done
bash
参数扩展语法${MYSTRING//in/by}
(或)${MYSTRING//in}
以替换所有匹配项的方式贪婪。在您的情况下,将所有白色空格替换为空(null-string),以便您可以将空字符串与-z
答案 1 :(得分:0)
使用-z
时,请使用空字符串 - 而不是空格。在循环时将${array[@]}
与""
括起来。
test=( "apple" "orange" "")
for i in "${test[@]}";
do
if [[ -z "$i" ]]; then
echo "Oh no!"
fi
done