Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何将两个文件作为命令的参数?_Bash_Shell - Fatal编程技术网

Bash 如何将两个文件作为命令的参数?

Bash 如何将两个文件作为命令的参数?,bash,shell,Bash,Shell,我正在重新命名bash脚本 事情是这样的: for file in ./*; do filename="$(basename "$file")" echo $filename >> .bulkren1 echo $filename >> .bulkren2 done $EDITOR .bulkren2 现在我有两个文件: .bulkren1与旧名称相同 .bulkren2的新名称 我想得到每一行,然后用双引号做一个mv-I-$oldname$n

我正在重新命名bash脚本

事情是这样的:

for file in ./*; do
    filename="$(basename "$file")"
    echo $filename >> .bulkren1
    echo $filename >> .bulkren2
done

$EDITOR .bulkren2
现在我有两个文件:

.bulkren1与旧名称相同

.bulkren2的新名称

我想得到每一行,然后用双引号做一个mv-I-$oldname$newname,这样我就可以使用空格和其他字符了。最好的方法是什么


我尝试了很多方法,但都没有成功。

并行读取两个文件很棘手。您需要在这里使用唯一的文件描述符3和4打开这两个文件,然后在循环中使用两个read语句逐行读取它们

exec 3< .bulkren1
exec 4< .bulkren2

while IFS= read -r oldname <&3 && IFS= read -r newname <&4; do
    mv -i -- "$oldname" "$newname"
done

exec 3<&- 4<&-    # Close files.

并行读取两个文件是很棘手的。您需要在这里使用唯一的文件描述符3和4打开这两个文件,然后在循环中使用两个read语句逐行读取它们

exec 3< .bulkren1
exec 4< .bulkren2

while IFS= read -r oldname <&3 && IFS= read -r newname <&4; do
    mv -i -- "$oldname" "$newname"
done

exec 3<&- 4<&-    # Close files.

只使用一个文件不是更简单吗?顺便说一句,echo$filename比echo$filename更容易出错;应用。比这更好的是printf“%s\n”$filename,它可以正确处理echo可能阻塞的某些文件名。仅使用一个文件,如何将两个名称封装在双引号内?我应该在file1和file2中添加双引号并粘贴-d file1 file2>file3吗?这是个好问题!你把它作为一个单独的问题问怎么样?它应该有自己的帖子。@grand0rbitter,我认为mkrieger1建议在lockstep中迭代./*和.bulkren2的内容。需要能够假设目录的内容没有改变,ofc,所以这有点冒险。不确定你在说什么re:quotes-你不应该在文件中有引号;这将使它们成为数据,它们只有在语法上才有意义/用途。只使用一个文件不是更简单吗?顺便说一句,echo$filename比echo$filename更容易出错;应用。比这更好的是printf“%s\n”$filename,它可以正确处理echo可能阻塞的某些文件名。仅使用一个文件,如何将两个名称封装在双引号内?我应该在file1和file2中添加双引号并粘贴-d file1 file2>file3吗?这是个好问题!你把它作为一个单独的问题问怎么样?它应该有自己的帖子。@grand0rbitter,我认为mkrieger1建议在lockstep中迭代./*和.bulkren2的内容。需要能够假设目录的内容没有改变,ofc,所以这有点冒险。不确定你在说什么re:quotes-你不应该在文件中有引号;这将使它们成为数据,它们只有在语法上才有意义/用途。