首页 > 解决方案 > 当文件包含特殊字符时,做 var=$( cat file.txt ) 打印目录的内容?

问题描述

我使用绑定到键盘快捷键的 bash 脚本来读取降价文件的特定块,并将其发送到共享生产力系统(nextcloud 平台)的 api。

问题似乎是文件中有一堆特殊字符,因为它在一段带有 /Mting%20Notes&openfile 的 url 之后被切断

我尝试使用它进行测试var=$(cat MUSTDO.txt),然后echo $var在 gnome shell 中打印出整个目录的内容。

如何在不破坏任何内容的情况下将变量设置为文件的内容、特殊字符和所有内容?

这是我使用的完整脚本:

#!/bin/bash
#pullout tasks section from local file
awk '/xstart/{flag=1; next} /xend/{flag=0} flag' /home/user1/NotesToSelf/1TASKS_PAD_ALWAYS_VIEW.md > MUSTDO.txt

#set as var, i think this is where things break?
MUSTDO=$(cat MUSTDO.txt)

#send $MUSTDO to nxclouddeck api
curl -X PUT -u username:password \
'https://cloud.example.com/nextcloud/index.php/apps/deck/api/v1.0/boards/11/stacks/12/cards/539' \
-d 'title=Today Tasks' \
-d 'type=plain' \
-d 'owner=username' \
-d "description=$MUSTDO" \
-H "OCS-APIRequest: true" 

我假设设置变量时事情会中断,但我对脚本很陌生,所以我真的不知道。任何资源、意见或建议将不胜感激。

编辑:正如我在评论中提到的,运行上面的脚本会导致我在 nextcloud 中编辑的卡只显示它应该显示的一半内容。它在包含以下内容的 url 后中断:/Mting%20Notes&openfile。

标签: bashnextcloud

解决方案


在跨平台、最低公分母中sh,您使用:

#!/bin/sh
value=`cat config.txt`
echo "$value"

在 bash 或 zsh 中,在不调用 cat 的情况下将整个文件读入变量:

#!/bin/bash
value=$(<config.txt)
echo "$value"

推荐阅读