gpt4 book ai didi

当值分配给变量时,Unix 中的正则表达式问题

转载 作者:行者123 更新时间:2023-11-29 09:27:35 26 4
gpt4 key购买 nike

在 Unix 中将输出重定向到变量时出现问题。

mobileTest.txt

abc.xyx.homepage:https://www.abc.xyz/h-offer/?fromms=1&LNX=KJHYU&oC=ABC

脚本:

#!/bin/bash
TEST_PAGE_KEY="abc.xyx.homepage"

grep -w $TEST_PAGE_KEY mobileTest.txt | cut -d':' -f2-|sed 's/[&/\]/\\&/g'

输出:这是正确的...

https:\/\/www.abc.xyz\/h-offer\/?fromms=1\&LNX=KJHYU\&oC=ABC

相比之下,当在变量中捕获命令的输出时:

TEST_PAGE_VALUE=`grep -w $TEST_PAGE_KEY  mobileTest.txt | cut -d':'  -f2-|sed 's/[&/\]/\\&/g'`

echo $TEST_PAGE_VALUE

变量输出:

https:&&www.abc.xyz&h-offer&?fromms=1&LNX=KJHYU&oC=ABC

我不明白为什么当我将它分配给变量时输出不同(而不是添加反斜杠,它用 & 替换字符)。

最佳答案

您找到了原因之一 why the modern $(...) command-substitution syntax is preferable to legacy syntax `...` :

使用 $(...),您不必担心 \ 字符。在您的命令中,在命令替换的上下文中具有特殊含义。

因此,使用 $(...) 而不是 `...` 将产生所需的结果:

test_page_value=$(grep -w "$TEST_PAGE_KEY"  mobileTest.txt | cut -d':'  -f2-|sed 's/[&/\]/\\&/g')

另请注意,为了 avoid conflicts with environment variables and special shell variables,我如何避免使用全大写的变量名,以及我如何对 $TEST_PAGE_KEY 进行双引号(仍然命名不当)以保护它免受潜在的 shell 扩展。

关于当值分配给变量时,Unix 中的正则表达式问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38298315/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com