【发布时间】:2022-10-15 01:37:01
【问题描述】:
我正在尝试将 IFS 设置为“:”,但它似乎不起作用。这是我的代码,
FILE="/etc/passwd"
while IFS=':' read -r line; do
set $line
echo $1
done < $FILE
当我运行我的代码时,它似乎给了我整行。我使用 set 命令分配位置参数,仅提取用户名,但是当我尝试打印第一个位置参数 $1 时,它会输出整行。我究竟做错了什么?
【问题讨论】:
-
while IFS=: read -r user_name _; do printf '%s\n' "$user_name"; done </etc/passwd -
@Jetchisel 你能解释一下你的答案吗?我是 bash 编程的新手。还有为什么我不能使用
set? -
while IFS=: read -ra gecos_field; do printf '%s\n' "${gecos_field[0]}"; done </etc/passwd -
@Jetchisel我想提取除用户名以外的其他信息,例如组ID和用户ID。
set不是更合适吗? -
bash 中的
read内置有a标志,它将输入放入数组中