Shell
從單個變數創建對應於多個變數賦值的文本
我有一個具有這樣的值的變數
line=dog,/path1,/path2
我想要的是從值創建一個變數;ie
dog
應該是變數並希望得到以下輸出:dog=/path1,/path2 dog1=/path1 dog2=/path2
同樣,如果我有
line=bull,/val1,/val2
我需要以下輸出bull=/val1,/val2 bull1=/val1 bull2=/val2
請注意,
line
它將只有三個以逗號分隔的值。
我認為這就是你想要做的事情:
line='dog,/path1,/path2' IFS=', ' read -r -a dog <<< "$line" echo "$dog" dog echo "${dog[1]}" /path1 echo "${dog[2]}" /path2
這假設您的 shell 是 bash。
這是一個以 bash 為中心的解決方案:
IFS=, read -r -a vars <<<"$line" printf "%s\n" "${vars[0]}=${vars[1]},${vars[2]}" "${vars[0]}1=${vars[1]}" "${vars[0]}2=${vars[2]}"
第一行
$line
根據逗號將您的變數分成幾部分。第二行,由內而外:
- 輸出第一個值(例如’dog’),等號,然後是後兩個值,
1
輸出以, 等號為後綴的第一個值,然後是第二個值,- 輸出第一個值,後綴為
2
, 等號,然後是第三個值,printf
這三個字元串,用換行符分隔。正如您的問題一樣,這個答案被硬編碼為在
$line
.範例輸入和輸出(前導
$
是 shell 提示):$ line=dog,/path1,/path2 $ IFS=, read -r -a vars <<<"$line" $ printf "%s\n" "${vars[0]}=${vars[1]},${vars[2]}" "${vars[0]}1=${vars[1]}" "${vars[0]}2=${vars[2]}" dog=/path1,/path2 dog1=/path1 dog2=/path2
您可以輕鬆地將 printf 輸出重定向到文件。