循环数组时检查文件是否存在

时间:2016-05-17 01:19:37

标签: bash

嗯,我真的做了我的研究并阅读了许多"如何检查文件是否存在并触摸"的问题。但我仍然缺少一些东西。

这里我试图创建一个简单的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")

0 个答案:

没有答案