嗯,我真的做了我的研究并阅读了许多"如何检查文件是否存在并触摸"的问题。但我仍然缺少一些东西。
这里我试图创建一个简单的json文件,该文件稍后应该包含一个字典数组。字典对象每个都存储在ios_tut_meta数组中。 这些对象按原样写入tutorials_meta.json文件,但是我的文件存在检查永远不会进入" else"部分,因此我没有为我的对象写一个逗号分隔符。
...为什么文件检查不起作用?这是一个子shell问题吗?
# Write the meta info for the pages into tutorials_meta.json:
# {[{file: "123.html", title: "First Deep Map"}]}
file_ex="$tutorials_dir_ios/.meta"
rm "$file_ex"
echo "[" > "$tutorials_dir_ios/tutorials_meta.json"
for ios_meta in "${ios_tut_meta[@]}"
do
if [ ! -f "$file_ex" ]; then
touch "$file_ex"
else
echo "," >> "$tutorials_dir_ios/tutorials_meta.json"
fi
echo "$ios_meta" >> "$tutorials_dir_ios/tutorials_meta.json"
done
echo "]" >> "$tutorials_dir_ios/tutorials_meta.json"
echo "tutorials dir: $tutorials_dir_ios"
echo "meta: ${ios_tut_meta[@]}"
以上两个变量包含以下值:
tutorials dir: tmp/tutorials/ios
meta: {"file":"29855709.html","title":"First Map Application [iOS]"}
{"file":"29860078.html","title":"Map Annotations [iOS]"}
{"file":"29860406.html","title":"Map Deployment and Update [iOS]"}
{"file":"29860277.html","title":"Routing [iOS]"}
我已经通过这种方式向数组中添加了项目:
ios_tut_meta+=$(printf '{"file":"%s","title":"%s"}\n' "$i.html" "$title")
我打算用括号括起来写正确的部分。但是我疲惫的眼睛并没有抓住它。这就是我想写的:
ios_tut_meta+=($(printf '{"file":"%s","title":"%s"}\n' "$i.html" "$title"))
但这也是错误的,因为它将子shell中的结果分成几个数组项。对于我想要做的事情是正确的,即向数组添加一个字符串(实际上是一个字符串化的json对象):
meta_obj=$(printf '{"file":"%s","title":"%s"}\n' "$i.html" "$title")
ios_tut_meta+=("$meta_obj")