【发布时间】:2021-03-10 14:47:17
【问题描述】:
我正在尝试将一个数组与一个值进行比较,如果未找到匹配项,则打印一条错误语句。
arraylist="$(ls new-dir/ | cut -d' ' -f1)"
例如,它存储诸如小、大和中等值,它们是存在于new-dir 中的文件。
要与之比较的值将由用户输入,即。变量
我尝试过类似以下的方法:
(for i in "${arraylist[@]}"; do [[ "$i" == "$var"]] && exit 0; done) && echo "found" || echo "not found"
也试过了,还是不行:
arraylist="$(ls new-dir/ | cut -d' ' -f1)"
count=0
for((i=0; i<${#arraylist[@]}; i++)); do
if [ "$arraylist[$i]" == "$var" ] ; then
count=1
fi
done
if [ $count -eq 0 ]; then
echo "Not found"
fi
还有其他方法可以进行这种比较吗?
【问题讨论】:
-
您访问数组元素的语法错误。它应该是
${arraylist[$i]}或${arraylist[i]},因为这是一个索引数组。还有,Why you shouldn't parse the output of ls. -
上面的整个sn-p可以简化为
[[ -e new-dir/$var ]] || echo "Not found"(如果语法正确的话)。 -
arraylist="$(这不是一个数组。这是一个正常的变量。 stackoverflow.com/questions/3685970/… 回答你的问题? -
感谢您的帮助。有什么方法可以从目录中获取文件并将其存储在一个数组中而无需手动形成一个?
-
@AishwaryaK 我不知道“无需手动成型”是什么意思,但这很容易做到:
files=(dirname/*)。请注意,该数组还将包含非常规文件(如果有),并且默认情况下不包含以.开头的文件名。