[英]Expanding bash variable within a string
我試圖在字符串中獲取一個變量來擴展 - 它是一個路徑:
/path/to/${variable}/這里
這是json文件:
{
"server_1":{
"tag": "storage_1",
"user": "me",
"sshKey": "/Users/me/.ssh/id_rsa",
"target_folder": "/Users/me/Desktop/",
"pubIp": "127.0.0.1",
"data_folders": [
"/Users/me/Desktop/POD_INSTALLS/pod_DB/${BUILD_FOLDER}/data/table1/",
"/Users/me/Desktop/POD_INSTALLS/pod_DB/${BUILD_FOLDER}/data/table2/"
]
}
}
這是 jq 代碼(現在有工作代碼 - 謝謝大家):
writeFolder=$(jq -r --arg bf "${BUILD_FOLDER}" '.server_'${id}'.data_folders[] | sub("\\${BUILD_FOLDER}";$bf)' "${json_path}")
for folder in $writeFolder
do
ssh -q -o ForwardX11=no -i ${sshKey} ${user}@${pubIp} "mkdir -p ${folder}"
done
最初 - 在擴展的 $writeFolder 變量中,可以看到路徑,但 ${BUILD_FOLDER} 變量保持未擴展,因為它是按字面意思理解的。 (當我使用 set -x 時,我可以看到它被單引號包圍)。
最終使用了來自峰值的公認解決方案,以更好地利用 jq。
正如評論中指出的那樣,讓 jq 做盡可能多的工作會更好。 但是要使用 jq,您需要修復 JSON。 另外,我不清楚您是否需要計算 $numberOfDataFolders,所以為了簡單起見,我建議這樣做:
#!/bin/bash
json_path=input.json
BUILD_FOLDER=mybuildfolder
jq -r --arg bf "$BUILD_FOLDER" '.data_folders[] | sub("\\${BUILD_FOLDER}";$bf)' "${json_path}" |
while read -r writeFolder
do
echo mkdir -p "${writeFolder}"
done
一旦輸入被修復,這將產生:
mkdir -p /Users/me/Desktop/POD_INSTALLS/pod_DB/mybuildfolder/data/table1/
mkdir -p /Users/me/Desktop/POD_INSTALLS/pod_DB/mybuildfolder/data/table2/
另請注意, -r 選項避免了使用tr
的需要。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.