相关疑难解决方法(0)

用双引号替换文件中的单引号

我需要将 /tmp/myfile 中包含的所有单引号 ' 替换为 "(双引号)

我正在使用这个

sed -i 's/'/\"/g' /tmp/myfile
Run Code Online (Sandbox Code Playgroud)

和其他组合,但我找不到有效的方法。

请任何帮助。

sed

3
推荐指数
3
解决办法
4758
查看次数

什么是(确切地说)“列表上下文”(和“字符串上下文”)?

我已经多次看到“列表上下文”和“字符串上下文”的使用。

我知道并理解在 perl 中使用此类描述。它们适用于 $ 和 @

但是,在 shell 描述中使用时:

它们似乎是一个没有在任何地方定义或
充其量只是记录不充分的术语。

根据谷歌的说法,POSIX 中没有对此的定义

这是(从这)它的要点吗?:

简而言之,在需要单词列表或模式的任何地方都需要双引号。在解析器需要原始字符串的上下文中,它们是可选的。

但这似乎是一个难以使用的术语。当“需要结果”时,我们如何才能找到“结果应该是什么”以了解它是字符串还是列表上下文。

或者它可以被精确和正确地定义吗?

shell

2
推荐指数
2
解决办法
572
查看次数

使用 $'...'、$"..."、'...' 和 "..." 的文本颜色

从我记事起,我个人在使用 bash 时使用以下方法来更改输出文本的颜色:

red=$'\033[1;31m'                                                                        
nc=$'\033[0m'

echo "${red}This is red text$nc"
Run Code Online (Sandbox Code Playgroud)

无论是在 macOS 还是 Linux 上使用,它总是对我有用。出于好奇,为了更好地理解它为什么起作用,我做了一些研究并发现了一些不包括$red='\033[1;31m')的答案/示例。经过一些测试,如果我不使用$,输出颜色不会更改为红色,而只是打印字符串。但是,当使用sh而不是执行它时bash,文本确实会改变颜色。有人可以帮助我理解这是为什么吗?

我还用双引号而不是单引号对其进行了测试,并且它似乎仅在使用sh. 我将在下面发布示例。

这是我使用的脚本和代码:

#!/bin/bash                                                                              
                                                                                         
red=$'\033[1;31m'                                                                        
nc=$'\033[0m'                                                                            
                                                                                         
echo "${red}Test 1$nc"                                                                   
echo ""                                                                                  
                                                                                         
##########################                                                               
                                                                                         
red=$"\033[1;31m"                                                                        
nc=$"\033[0m"                                                                            
                                                                                         
echo "${red}Test 2$nc"                                                                   
echo ""                                                                                  
                                                                                         
##########################                                                               
                                                                                         
red='\033[1;31m'                                                                         
nc='\033[0m'                                                                             
                                                                                         
echo "${red}Test 3$nc"                                                                   
echo ""                                                                                  
                                                                                         
##########################                                                               
                                                                                         
red="\033[1;31m"                                                                         
nc="\033[0m"                                                                             
                                                                                         
echo "${red}Test 4$nc"                                                                   
echo ""  
Run Code Online (Sandbox Code Playgroud)

使用 bash 和 sh 在 macOS 上输出:

在此输入图像描述

Linux 上同时使用 bash 和 sh 的输出:

在此输入图像描述

linux shell colors bash macos

2
推荐指数
1
解决办法
1378
查看次数

Bash 变量替换为 yq 命令

给定一个 YAML 文件example.yaml

node:
  sub_node:
    get_this:
Run Code Online (Sandbox Code Playgroud)

我想获得一个包含get_this使用 Mike Farahyq和字符串的变量sub_node

yaml="$(cat example.yaml)"
nodename=sub_node
sub_yaml= "$(echo "$yaml" | yq -r '.$nodename' )";
# also tried -> sub_yaml= "$(echo "$yaml" | yq -r '.'"$nodename" )";
Run Code Online (Sandbox Code Playgroud)

请注意,这是一个人为的示例,实际上,该sub_node字符串事先并不知道,因此我需要替换该$nodename字符串。

我似乎无法弄清楚如何转义 所需的单引号查询字符串yq

我该怎么做?

bash command-substitution variable-substitution yaml

2
推荐指数
1
解决办法
5281
查看次数

为什么我不能单引号变量?

所以这段代码工作得很好,“$i”用双引号引起来:

for ((i=0; i <= 10; i++)); do
    printf '%d\n' "$i"
    done
Run Code Online (Sandbox Code Playgroud)

但是,如果我将“$i”放在单引号('$i')中,我只会得到 10 次迭代:

bash: printf: $i: invalid number
0
Run Code Online (Sandbox Code Playgroud)

为什么?这个问题包含一个错误报告,它不像每个人都说的那样具有哲学性。在确定这是一个“糟糕的问题”之前,我无法阅读互联网上的所有内容。

bash shell-script

0
推荐指数
1
解决办法
142
查看次数

如何通过 ssh 发送带有变量的表达式?

我可以在本地运行以下循环

for i in A B C; do mycommand $i; done
Run Code Online (Sandbox Code Playgroud)

现在我正尝试将其发送过来ssh

以下版本

ssh myhost for i in A B C; do mycommand $i; done
Run Code Online (Sandbox Code Playgroud)

以下版本

ssh myhost "for i in A B C; do mycommand $i; done"
Run Code Online (Sandbox Code Playgroud)

也失败了,因为它需要i本地变量。

如何处理?


有没有通用的方法,例如,如果mycommand是另一个 ssh 怎么办?

ssh myhost 'for i in hos1 host2 host3; do ssh "$i" ... another for expression
Run Code Online (Sandbox Code Playgroud)

shell ssh variable

0
推荐指数
1
解决办法
37
查看次数

如何删除名称中包含空格和引号的文件?

1 '2 3' 4 5 在Linux下如何删除一个名为的文件?我用过的方法都没有效果。

linux shell bash command

-1
推荐指数
1
解决办法
1101
查看次数