hru*_*day 0 variables bash input jenkins command-substitution
我在 Jenkins Execute shell 块中有一个如下编写的 bash 脚本
id="233"
Run Code Online (Sandbox Code Playgroud)
我想在以下命令中使用这个 id 变量
bash -c 'comm -12 <(sort file1_${id}.txt) <(sort file2_${id}.txt)'
Run Code Online (Sandbox Code Playgroud)
但它抛出错误
sort: cannot read: file1_.txt: No such file or directory
sort: cannot read: file2_.txt: No such file or directory
Run Code Online (Sandbox Code Playgroud)
我尝试了以下但没有运气,不知道如何解决
"$id"
"${id}"
'$id'
'${id}'
Run Code Online (Sandbox Code Playgroud)
单引号防止$id
从之前被扩展bash
运行,并且该变量id
没有在随后的膨胀外壳限定$id
被尝试。
简单(但脆弱)的解决方案是使用双引号,以便$id
扩展以生成在新 shell 中运行的命令。
bash -c "comm -12 <(sort file1_${id}.txt) <(sort file2_${id}.txt)"
Run Code Online (Sandbox Code Playgroud)
一个更健壮的解决方案是将 的值$id
作为参数传递给 shell(并在命令中使用双引号来保护 的扩展$1
,如果 的值$id
需要它)。
bash -c 'comm -12 <(sort "file1_$1.txt") <(sort "file2_$1.txt")' bash "$id"
Run Code Online (Sandbox Code Playgroud)
(脚本后面的第一个参数用于 set $0
;它的值并不重要,但 shell 的名称是一个很好的虚拟参数。)
(我假设bash -c '...'
出于某种原因是必需的,并且您不能简单地单独使用comm -12 <(sort "file1_$id.txt") <(sort "$file2_$id.txt")
。)