有什么方法可以控制我運行 a, for d in * 時發生的排序;做; 回聲 $i; 完畢; 在我的目錄中?我有這個檔案夾結構:
root/
|__CloudUtils/
|__ComponentSplit/
|__ComponentStatistics/
|__ETLManager/
|__MergeComponent/
|__NormalizeComponent/
|__Reducer/
而且我想更改順序,以便 mvn 將在 CloudUtils 之后立即編譯 NormalizeComponent。
for d in */ ; do
d=${d::-1}
mvn clean deploy -f "$d"
done
有沒有辦法做到這一點?
uj5u.com熱心網友回復:
查爾斯回答的一個變體:
shopt -s extglob
exception='NormalizeComponent'
dirs=( !("$exception")/ )
dirs=( "${dirs[0]}" "$exception"/ "${dirs[@]:1}" )
for d in "${dirs[@]}"; do
echo "$d"
done
輸出
CloudUtils/
NormalizeComponent/
ComponentSplit/
ComponentStatistics/
ETLManager/
MergeComponent/
Reducer/
uj5u.com熱心網友回復:
只有存在與您需要的排序順序相匹配的情況下,您才能控制排序結果;LC_COLLATE可用于選擇要使用的順序——但在這種情況下,您的作業系統提供的所有順序都不會與您想要的行為相匹配。
您可以使用帶有否定斷言的 extglob將特定目錄排除在 glob 的結果之外,因此您可以對第一項和第二項進行硬編碼,并按照語言環境的排序規則設定提供的順序執行其他所有操作:
#!/usr/bin/env bash
[ -n "$BASH_VERSION" ] || { echo "ERROR: only bash is supported" >&2; exit 1; }
shopt -s extglob
for d in CloudUtils NormalizeComponent !(CloudUtils|NormalizeComponent)/; do
mvn clean deploy -f "${d%/}"
done
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/416867.html
標籤:
