引用 Bash 问题

引用 Bash 问题

这是我的代码。

我可以给出为什么我要执行这段代码。我尝试获取 1 个文件,获取一行并猜测该行 1 是否有任何“”,如果有,我切换到第二个文件并尝试查看第 1 行是否有“" 如果没有,我保留 file2/line1 的数据并进入最终文件。

但我的问题是:如何进行转义引用?

#! /bin/bash
compteur="1"
ligne="2"
rm testfinal 2>/dev/null
touch testfinal 2>/dev/null
#########BOUCLE PERMUTATION LIGNE

while (( $ligne < "32" ))
do
        if [ 'cat test$compteur | sed -n $ligne\p | awk -F" "'{print $2}' ' == "*" ]
        then compteur=$((compteur+1));
        else
                   cat test$compteur | sed -n $ligne\p >> testfinal
                   ligne=$((ligne+1));
                   compteur=$((compteur=1));
fi
done

编辑:我发现自己,他的答案: if [ " sed -n $ligne\p test$compteur | awk -F" " '{print $2}'" == "*" ]

答案1

您的示例命令没有任何意义。您没有thenfi与您的 一起使用if,并且您错误地将命令填充到test(即[)块中。

你的代码:

if [ 'cat test$compteur | sed -n $ligne\p | awk -F" " '{print $2}' ' == "*" ]

看起来就像您试图比较该命令链的输出,如果输出是字面意思*,那么做一些未确定的事情?如果是这样:

if [[ "$( cat test$computer | sed -n $ligne\p | awk -F' ' '{print $2}')" == "*" ]]; then
    do_something
fi

但这可以稍微优化一下;尤其是摆脱“无用的使用cat

if [[ "$( sed -n $ligne\p test$computer | awk -F' ' '{print $2}')" == "*" ]]; then
    do_something
fi

我不确定您正在使用sed命令做什么,但假设这linge是一个包含要打印的行号的变量,这甚至可以在以下位置完成awk

if [[ "$( awk -F' ' -v ln=$linge 'NR==ln { print $2 }' )" == "*" test$computer ]]; then
    do_something
fi

根据您在“答案”中提交的完整脚本,我用这些更改和其他一些小调整重写了它:

#!/bin/bash
compteur="1"
ligne="2"
> testfinal # clears contents of file in one step rather than rm; touch
#########BOUCLE PERMUTATION LIGNE

while [[ "$ligne" -lt 32 ]]; do
    if [[ "$( awk -F' ' -v ln=$ligne 'NR==ln { print $2 }' test$computer )" == "*" ]]; then
        compteur=$((compteur+1));
    else
        awk -v ln=$ligne 'NR==ln' >> testfinal
        ligne=$((ligne+1))
        compteur=$((compteur+1)); # I presume that the original 'compteur=1' was a typo.
    fi
done

答案2

您是否有可能混淆单引号'和反引号“``”?使用反引号(旧的、已弃用的“命令替换”,相当于新的$(...)),您的代码行将有意义,尽管 GopeGhoti 提出了改进建议。

相关内容