标签: variable-substitution

bash中带有感叹号的变量替换

我的 .cfg bash 脚本文件中有以下几行

DDF_SOURCE="siebel_DATA_DATE_FORMAT"
DATA_DATE_FORMAT=${!DDF_SOURCE}
Run Code Online (Sandbox Code Playgroud)

${!DDF_SOURCE}如何评估?它会是!siebel_DATA_DATE_FORMAT,这对我来说没有意义。

bash variable-substitution

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

转义变量以用作另一个脚本的内容

这个问题不是关于如何编写正确转义​​的字符串文字。我找不到任何与如何转义变量以在脚本或其他程序中直接使用的相关问题。

我的目标是使脚本能够生成其他脚本。这是因为生成的脚本中的任务将在另一台机器上运行 0 到n次,并且生成它们的数据在运行(再次)之前可能会发生变化,因此直接通过网络执行操作将不行。

给定一个可能包含特殊字符(例如单引号)的已知变量,我需要将其写为完全转义的字符串文字,例如,foo包含的变量bar'baz应出现在生成的脚本中:

qux='bar'\''baz'
Run Code Online (Sandbox Code Playgroud)

这将通过附加"qux=$foo_esc"到其他脚本行来编写。我是这样使用 Perl 做到的:

foo_esc="'`perl -pe 's/('\'')/\\1\\\\\\1\\1/g' <<<"$foo"`'"
Run Code Online (Sandbox Code Playgroud)

但这似乎有点矫枉过正。

我单独使用 bash 没有成功。我已经尝试了这些的许多变体:

foo_esc="'${file//\'/\'\\\'\'}'"
foo_esc="'${file//\'/'\\''}'"
Run Code Online (Sandbox Code Playgroud)

但是输出中会出现额外的斜杠(当我这样做时echo "$foo"),或者它们会导致语法错误(如果从 shell 完成,则需要进一步的输入)。

bash variable-substitution variable bash-expansion

38
推荐指数
5
解决办法
9万
查看次数

在另一个变量“内部”使用变量引用

我确定它相对简单,我只是不知道该怎么做。

#!/usr/bin/ksh
set `iostat`
myvar=6
Run Code Online (Sandbox Code Playgroud)

我想要类似的东西echo ${$myvar},我想解释为${$myvar}-> ${6}->value

ksh shell-script variable-substitution

35
推荐指数
2
解决办法
12万
查看次数

bash 和 zsh 中的双重和三重替换

跟进此问题中的背景部分。

在bashI 可以${!FOO}用于双重替换,在zsh ${(P)FOO}. 在这两种情况下,老派(hack-y)都eval \$$FOO有效。

所以,对我来说最聪明和最合乎逻辑的事情是${${FOO}}, ${${${FOO}}}…双/三/n 替换。为什么这不能按预期工作?

二:什么是\在做eval陈述?我认为这是一种逃避,使事情eval \$$$FOO变得不可能。如何使用在每个 shell 中都有效的三重 / n 替换?

bash zsh variable-substitution

31
推荐指数
4
解决办法
3万
查看次数

${PATH:+:${PATH}} 是什么意思?

我最近在我的 cygwin 配置文件中注意到以下内容,更准确地说:

/usr/local/bin:/usr/bin${PATH:+:${PATH}}
Run Code Online (Sandbox Code Playgroud)

这是什么意思?为什么不只是 $PATH?这是“如果 $PATH 存在则添加:$PATH”吗?我的目的是交换顺序并将 cygwin 路径放在 windows 路径后面。过去我会

$PATH:/usr/local/bin:/usr/bin
Run Code Online (Sandbox Code Playgroud)

但这让我感到困惑。也许我应该做

PATH="${PATH:+${PATH}:}/usr/local/bin:/usr/bin"
Run Code Online (Sandbox Code Playgroud)

追加 : 在 $PATH 的末尾?

shell path variable-substitution

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

为什么我的变量在一个“while read”循环中是局部变量,而在另一个看似相似的循环中却不是?

为什么我$x从下面的片段中得到不同的值?

#!/bin/bash

x=1
echo fred > junk ; while read var ; do x=55 ; done < junk
echo x=$x 
#    x=55 .. I'd expect this result

x=1
cat junk | while read var ; do x=55 ; done
echo x=$x 
#    x=1 .. but why?

x=1
echo fred | while read var ; do x=55 ; done
echo x=$x 
#    x=1  .. but why?
Run Code Online (Sandbox Code Playgroud)

pipe shell-script variable-substitution variable

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

如何在字符串中的bash变量后避免空格?

我有一个颜色变量。我用它来为字符串设置颜色,方法是在字符串内部对其进行评估。但是,我需要在名称后包含空格(以便名称不包含部分文本)。这有时看起来很糟糕。

我怎样才能避免使用(打印)这个空间?

示例(让我们说Red=1和NC=2):

echo -e "$Red Note: blabla$NC".
Run Code Online (Sandbox Code Playgroud)

输出:

1 Note: blabla2.
Run Code Online (Sandbox Code Playgroud)

预期输出:

1Note: blabla2.
Run Code Online (Sandbox Code Playgroud)

shell bash variable-substitution

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

Bash 变量替换变量后跟下划线

该变量BUILDNUMBER设置为值 230。我希望230_为命令打印,echo $BUILDNUMBER_但输出为空,如下所示。

# echo $BUILDNUMBER_

# echo $BUILDNUMBER
230
Run Code Online (Sandbox Code Playgroud)

bash shell-script variable-substitution

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

bash 是否支持参数扩展中的反向引用?

我有一个名为变量descr可以包含字符串Blah: -> r1-ae0-2 / [123],-> s7-Gi0-0-1:1-US / Foo等等。我想要得到的-> r1-ae0-2,-> s7-Gi0-0-1:1-US部分从字符串。目前我用descr=$(grep -oP '\->\s*\S+' <<< "$descr"这个。有一个更好的方法吗?是否也可以通过参数扩展来做到这一点?

bash string regular-expression variable-substitution

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

${!FOO} 和 zsh

${!FOO}在 中执行双重替换bash,这意味着它采用 FOO 的(字符串)值并将其用作变量名。
zsh不支持此功能。

有没有办法使这项工作在bash和 中相同zsh?

背景:

我有一个环境变量列表,比如

PATH MAIL EDITOR
Run Code Online (Sandbox Code Playgroud)

并且想先打印变量名,然后打印它们的值。

这适用于bash但不适用于zsh:

PATH MAIL EDITOR
Run Code Online (Sandbox Code Playgroud)

应该以某种方式可能以“旧方式”使用eval,但我无法让它工作:

for VAR in LIST
do
        echo $VAR
        echo ${!VAR}
done
Run Code Online (Sandbox Code Playgroud)

我永远不会明白为什么我不能简单地进行任意深度替换,例如${${VAR}}或即使${${${VAR}}}需要,所以对此的解释也很好。

bash zsh variable-substitution for

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