我對以下 for 回圈有疑問:
X="*back* OLD"
for P in $X
do
echo "-$P"
done
我需要它來輸出:
-*back*
-OLD
但是,它會列出當前目錄中與該*back*模式匹配的所有檔案。例如,它給出了以下內容:
-backup.bkp
-backup_new.bkp
-backup_X
-OLD
如何強制它輸出確切的模式?
uj5u.com熱心網友回復:
使用陣列,因為不帶引號的引數擴展仍會受到通配符的影響。
X=( "*back*" OLD )
for P in "${X[@]}"; do
printf '%s\n' "$P"
done
(使用printf,因為echo可以嘗試將引數解釋為選項,例如,如果您有n的值X。)
uj5u.com熱心網友回復:
set -o noglob在回圈之前和之后使用set o noglob來禁用和啟用通配符。
uj5u.com熱心網友回復:
為了防止檔案名擴展,您可以將字串作為Here String讀取。
要遍歷專案,您可以使用引數擴展將它們變成行并使用read. 為了能夠將-符號作為第一個字符,請使用printf代替echo.
X="*back* OLD"
while read -r x
do printf -- '-%s\n' "$x"
done <<< "${X/ /$'\n'}"
另一種方法是使用tr將字串轉換為行,然后使用paste符號-作為分隔符,并將“無”/dev/null作為第一列。
X="*back* OLD"
tr ' ' '\n' <<< "$X" | paste -d- /dev/null -
兩者都應該輸出:
-*back*
-OLD
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/430503.html
上一篇:在awk腳本中保留浮點值小數位
