将变量回显到文件而不使用换行符

将变量回显到文件而不使用换行符

我想删除 Echo 中的新行,然后用它们作为文件后缀。

files=$(cat ./Temp/files.txt)
prefixedfiles=$(cat ./Temp/prefixedfiles.txt)
echo "$files" >> generatedscript
sed -e 's/^/ffmpeg -i /' generatedscript >> generatedscript2
sed 's/$/ -vcodec libx264 -acodec copy -threads 10 -crf 18 /' >> 
generatedscript2
echo "$prefixedfiles" > generatedscript3

例如 files.txt

./Testing/blank.mp4
./More Testing/Test.mkv

例如 prefixedfiles.txt

../Encoded/Testing/blank.mp4
../Encoded/More Testing/Test.mkv

预期输出:generatedscript3

ffmpeg -i ./Testing/blank.mp4 -vcodec libx264 -acodec copy -threads 10 -crf 18 ../Encoded/More Testing/blank.mp4
ffmpeg -i ./More Testing/Test.mkv -vcodec libx264 -acodec copy -threads 10 -crf 18 ../Encoded/More Testing/Test.mkv

答案1

根据我的评论,我认为您提供的脚本的逻辑存在缺陷 - 具体来说,我不明白 sed 如何能够按行合并 2 个输入文件(我认为它不像您想象的那样工作)

我为你想到了一个替代解决方案 -

#! /bin/bash

export IFS=$'\n'

(
for LINE in `paste Temp/files.txt Temp/prefixedfiles.txt`
do
    F1=`echo $LINE | cut -f1`
    F2=`echo $LINE | cut -f2`    
    echo "ffmpeg -i $F1 -vcodec libx264 -acodec copy -threads 10 -crf 18 $F2"

done 
) > generatedscript3

解释:

导出 IFS 行将文件分隔符更改为换行符 - 这意味着文件中的空格将得到正确处理。

神奇的事情发生在 LINE 循环中——“粘贴”命令将两个文件合并为一个制表符分隔的输出,然后逐行处理。

F1 和 F2 将输入的两部分分成变量,然后使用 echo 行打印出来。

整个输出被捕获到一个名为 generatedscript3 的文件中(因为循环和回显位于括号之间)

相关内容