Arrays Bash-检查数组的每个索引是否为空值
通过下面的代码,我希望检查数组中的每个索引是否有空值、空字符串或仅包含空格的字符串。但是它不起作用Arrays Bash-检查数组的每个索引是否为空值,arrays,bash,quoting,Arrays,Bash,Quoting,通过下面的代码,我希望检查数组中的每个索引是否有空值、空字符串或仅包含空格的字符串。但是它不起作用 test=( "apple" "orange" " ") for i in ${test[@]}; do if [ -z "$i" ]; then echo "Oh no!" fi done 它从不进入if块。我做错了什么?您的脚本中有几个错误 ${test[@]}中i的未引用数组扩展,在此期间,只有空格的元素被shell忽略 而-z选项只检查空字符串,而不是带空
test=( "apple" "orange" " ")
for i in ${test[@]};
do
if [ -z "$i" ]; then
echo "Oh no!"
fi
done
它从不进入if块。我做错了什么?您的脚本中有几个错误
代码>,在此期间,只有空格的元素被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}
在某种程度上是贪婪的,它替换了所有出现的情况。在您的情况下,将所有空格替换为零(空字符串),这样您就可以通过-z
匹配空字符串,在检查-z
时使用空字符串-而不是空格。循环时用“
将${array[@]}
括起来
test=( "apple" "orange" "")
for i in "${test[@]}";
do
if [[ -z "$i" ]]; then
echo "Oh no!"
fi
done
空格不是空的,您还需要引用
${test[@]}
,因为它当前将删除空白和空值。如果我希望同时检查空白字符串和空白,该怎么办?谢谢,这是我需要的。