首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我生成$i-$j_filename的bash循环不适用于内部循环,所以我只得到四个文件(1-4_filename,2-4_filename,...)?

为什么我生成$i-$j_filename的bash循环不适用于内部循环,所以我只得到四个文件(1-4_filename,2-4_filename,...)?
EN

Stack Overflow用户
提问于 2019-08-28 21:39:13
回答 1查看 17关注 0票数 1

我有一个参考文件“filename”。我在上面加上了“第一”和“第二”两个字。我现在想要生成一些文件,其中第一个和第二个文件被数字替换,这些文件相应地命名。例如:

1-1_filename.txt,1-2_filename.txt,1-3_filename.txt,1-4_filename.txt,2-1_filename.txt,2-2_filename.txt,2-3_filename.txt,2-4_filename.txt,...诸若此类。

我的代码(如下所示)正在进行替换和生成文件,但是我没有得到所有的文件。我只能得到1-4,2-4,3-4和4-4。我已经试验了几个小时,就是找不出我做错了什么。如果有任何建议,我将不胜感激。谢谢。

代码语言:javascript
复制
    cp filename.txt filename_bak.txt

    for i in 1 2 3 4; do
        for j in 1 2 3 4; do
            sed s~"FIRST"~"$i"~g $i_filename.txt | sed s~"SECOND"~"$j"~g > $i-$j_filename.txt
        done
    done
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-28 22:05:04

这似乎是一个打字错误:$i_filename.txt

你的主要问题在这里:$i-$j_filename.txt。变量中允许有下划线,所以被引用的变量是$j_filename。若要避免,请添加大括号以分隔。而且,将整个sed命令放在引号中会更具可读性。以下是您的脚本的修订版:

代码语言:javascript
复制
cp filename.txt filename_bak.txt
for i in 1 2 3 4; do
    for j in 1 2 3 4; do
        sed "s~FIRST~$i~g" filename.txt | sed "s~SECOND~$j~g" > $i-${j}_filename.txt
    done
done

顺便说一句,请查看shellcheck.net。这会为你找到主要的问题。我有一个本地可执行版本,它给了我这个错误:

script.sh|5 col 72 warning| j_filename is referenced but not assigned. [SC2154]

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57693811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档