for 循环对象上的 BASH 操作

for 循环对象上的 BASH 操作

我试图在 forloop 对象上运行 bash 命令,但它试图查找文件而不是使用 forloop 对象。

例子:

输入文件包含以下格式的行user:password

for item in $(cat myItems);do
        USER = cat $item | cut -d ":" -f1
        PASS = cat $item | cut -d ":" -f2
done

结果是它说文件 $item 未找到

我也尝试过

for item in $(cat myItems);do
        USER = $(cat $item | cut -d ":" -f1)
        PASS = $(cat $item | cut -d ":" -f2)
done

答案1

如果您确实需要为文件的每一行运行一些命令,您可以编写:

while IFS=: read -r user password rest_ignored; do
  something with "$user" and "$password"
done < myItems

cat是连接文件的命令,赋值语法var=value周围没有空格=$(...)可以在换行符上分割命令的输出,但前提是您设置$IFS正确并禁用通配符。

答案2

这似乎实现了您所追求的目标,并保持了您最初想要的脚本方法。

$ cat myItems
user:pass
user2:pass2
$ for item in $(cat myItems);do
    USER=$(echo $item | cut -d ":" -f1)
    PASS=$(echo $item | cut -d ":" -f2)
    echo user $USER pass $PASS
done
user user pass pass
user user2 pass pass2
$

相关内容