相关疑难解决方法(0)

为什么shell忽略通过变量传递给它的参数中的引号?

这与宣传的一样:

# example 1
#!/bin/bash
grep -ir 'hello world' .
Run Code Online (Sandbox Code Playgroud)

这不是:

# example 2
#!/bin/bash
argumentString="-ir 'hello world'"
grep $argumentString .
Run Code Online (Sandbox Code Playgroud)

尽管'hello world'在第二个例子中被引号括起来,但grep解释'hello为一个参数和world'另一个参数,这意味着,在这种情况下,'hello将是搜索模式world'并将成为搜索路径.

同样,这仅在从argumentString变量扩展参数时发生.grep 'hello world'在第一个示例中正确解释为单个参数.

谁能解释为什么会这样?有没有一种正确的方法来扩展一个字符串变量,它将保留每个字符的语法,以便shell命令正确解释它?

variables syntax bash quoting expansion

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

包含多个参数的变量,在Bash中带引号

我生成一个包含所有args的bash变量,这些args包含空格.当我用这些args启动命令时 - 例如.ls $ args - 引号未正确解释.这是一个示例 - 还创建和擦除所需的文件.

#!/bin/bash
f1="file n1"
f2="file n2"
# create files
touch "$f1" "$f2"
# concatenate arguments
args="\"$f1\" \"$f2\""
# Print arguments, then launch 'ls' command
echo "arguments :" $args
ls $args
# delete files
rm "$f1" "$f2"
Run Code Online (Sandbox Code Playgroud)

有了这个,我对"file,n1","file and n2"有一些"没有这样的文件"错误

variables bash quotes escaping

32
推荐指数
4
解决办法
2万
查看次数

Bash变量来自带有管道,引号等的命令

我有一个命令,我用来获取hostname.localdomain

dig axfr @dc1.localdomain.com localdomain.com | grep -i Lawler | awk '{ getline ; $1=substr($1,1,length($1)-1); print $1 ; exit }'
Run Code Online (Sandbox Code Playgroud)

这很好地返回一个结果,如:

michael.lawler.localdomain.com

我想进一步将该结果用作bash脚本中的变量.

我似乎无法越过第一个管道.

如果我 VAR="dig axfr @dc1.localdomain.com localdomain.com | grep -i Lawler | awk '{ getline ; $1=substr($1,1,length($1)-1); print $1 ; exit }'"

...我回到整个区域转移.我也尝试$过在dig命令之前添加许多小改动,没有引号,似乎没有任何效果.任何方向都非常感谢.

variables bash pipe

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

在双引号内使用双引号

我有一个带有以下内容的file1.txt:

time="2016-04-25T17:43:11Z" level=info msg="SHA1 Fingerprint=9F:AD:D4:FD:22:24:20:A2:1E:0C:7F:D0:19:C5:80:42:66:56:AC:6F"
Run Code Online (Sandbox Code Playgroud)

我希望文件看起来如下:

9F:AD:D4:FD:22:24:20:A2:1E:0C:7F:D0:19:C5:80:42:66:56:AC:6F  
Run Code Online (Sandbox Code Playgroud)

实际上,我需要将命令作为字符串传递.这就是为什么bash命令需要封装在带双引号的字符串中的原因.但是,当我包括

 " grep -Po '(?<=Fingerprint=)[^"]*' "   
Run Code Online (Sandbox Code Playgroud)

我没有得到所需的输出.似乎我需要正确地逃避双引号.

linux bash shell redhat sh

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

标签 统计

bash ×4

variables ×3

escaping ×1

expansion ×1

linux ×1

pipe ×1

quotes ×1

quoting ×1

redhat ×1

sh ×1

shell ×1

syntax ×1