首页 > 解决方案 > 双引号不保留 shell 脚本中的换行符 // Zenity

问题描述

我使用 Tokland 的 youtube-upload 上传视频。我提供了我的脚本,该脚本使用我从表单文本区域字段复制+粘贴到 zenity 对话框(如标题、描述等)的数据进行上传。该输入被拆分为单个项目。这一切都很好,除了描述,它在第一个换行符之后被切断。

当我用单个对话框隔离描述时,它可以工作

description=$(zenity --entry --text "FEED ME" --title "Description" --entry-text="");
printf $description # print outs the description with newlines

现在我尝试使用 zenity --forms 对话框,但描述再次被截断。

unset IFS

multiInput=$(zenity --forms --title="Everything + Description" --text="ENTER DATA  \
    --add-entry="Everything" \
    --add-entry="Description");

printf "%s\n" "$multiInput" # prints out form input properly w/ linebreaks

IFS="$IFS|" read -ra ALLdesc <<< "$multiInput"

printf "${ALLdesc[1]}" # prints out only the first line

我读到在“”中包含一个变量应该可以防止这种情况,但这在这里不起作用。对此有任何想法吗?

谢谢, SV

标签: shellnewlinezenity

解决方案


通过设置IFS='|',您说您只想对字符|进行分词。

由于您还想保留换行符,因此您必须确保\n也在其中IFS。因此,您应该附加|IFS不是覆盖它,例如IFS="$IFS|".


推荐阅读