我正在嘗試將 IFS 設定為“:”,但它似乎不起作用。這是我的代碼,
FILE="/etc/passwd"
while IFS=':' read -r line; do
set $line
echo $1
done < $FILE
當我運行我的代碼時,它似乎給了我整行。我使用 set 命令分配位置引數,僅提取用戶名,但是當我嘗試列印第一個位置引數時它會輸出整行$1。我究竟做錯了什么?
uj5u.com熱心網友回復:
IFS=':' read -r line讀取整行IFS=':' read -r name remainder將第一個欄位放入變數name中,將行的其余部分放入remainderIFS=':' read -r name password remainder將第一個欄位放入變數name中,將第二個欄位放入變數中password,并將該行的其余部分放入remainder.- ETC...
在 bash 中,您可以使用read -a array_var獲取包含所有欄位的陣列,這可能是您的目的最簡單的解決方案:
#!/bin/bash
while IFS=':' read -r -a fields
do
echo "${fields[0]}"
done < /etc/passwd
uj5u.com熱心網友回復:
您只是IFS為read命令設定。當您擴展$line變數時,它被設定回原始值。您需要設定IFS在那里,而不是在閱讀時。
oldIFS="$IFS" # save IFS
IFS=:
while read -r line; do
set $line
echo $1
done < $FILE
IFS="$oldIFS" # restore original IFS
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/515831.html
標籤:重击如果
上一篇:Bash中行程替換的執行順序
