Shell

從單個變數創建對應於多個變數賦值的文本

  • May 20, 2016

我有一個具有這樣的值的變數

line=dog,/path1,/path2

我想要的是從值創建一個變數;iedog應該是變數並希望得到以下輸出:

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根據逗號將您的變數分成幾部分。第二行,由內而外:

  1. 輸出第一個值(例如’dog’),等號,然後是後兩個值,
  2. 1輸出以, 等號為後綴的第一個值,然後是第二個值,
  3. 輸出第一個值,後綴為2, 等號,然後是第三個值,
  4. 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 輸出重定向到文件。

引用自:https://unix.stackexchange.com/questions/284459