我有一个 bash 代码,它将所有文件分配到一个变量中,用空格分割字符串并像这样循环它们:
$ ls
README db_password.example db_username.example
files_str=$(ls)
files=(${files_str// /})
for file in "${files[@]}"; do
if [ "$file" != "README" ]; then
echo "$file is not README";
fi;
done;
输出:
我现在认为它与数据类型有关。我以为 bash 只有字符串?我想我被误导了,也许是被类似这样的来源误导了:https://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-5.html#:~:text=There%20are%20no%20data%20types,its%20reference%20will%20create%20it。
但当我这样做
file=README
if [ "$file" != "README" ]; then
echo "$file is not README";
fi;`
我没有得到正确的输出。那么我该如何让它工作呢ls
?
答案1
您可能有一个“ls”的别名来添加颜色,该别名由额外的控制字符生成,这当然会弄乱字符串比较。尝试 /bin/ls 或 ls --color=none,而不仅仅是 ls。