Questions tagged «variable-substitution»




2
$ {PATH:+:$ {PATH}}是什么意思?
我最近在cygwin个人资料中注意到了以下内容: /usr/local/bin:/usr/bin${PATH:+:${PATH}} 这是什么意思?为什么不只是$ PATH?这是否是“如果$ PATH存在,然后添加:$ PATH”?我的目的是交换订单并将cygwin路径放在Windows路径后面。过去我会 $PATH:/usr/local/bin:/usr/bin 但这使我感到困惑。也许我应该做 PATH="${PATH:+${PATH}:}/usr/local/bin:/usr/bin" 在$ PATH的末尾附加:?

7
bash和zsh中的两次和三次替换
跟踪该问题的背景部分。 在中,bash我可以使用${!FOO}双重替换zsh ${(P)FOO}。在这两种方法中,老式的(hack-y)都eval \$$FOO可以。 因此,对我来说,最聪明,最合乎逻辑的事情是${${FOO}}, ${${${FOO}}}…使用double / triple / n替换。为什么这不能按预期工作? 二:什么是\在做eval陈述?我认为这是一种逃避,使eval \$$$FOO不可能的事情变成现实。如何用在每个shell中都可以使用的三/ n替换?

4
转义变量以用作另一个脚本的内容
这个问题与如何编写正确转义​​的字符串文字无关。我找不到任何有关如何转义变量以直接在脚本或其他程序中使用的相关问题。 我的目标是使一个脚本能够生成其他脚本。这是因为生成的脚本中的任务将在另一台计算机上运行0到n次,并且生成它们的数据可能会在运行之前(再次)更改,因此直接通过网络进行操作将不行。 给定一个可能包含特殊字符(例如单引号)的已知变量,我需要将其写为完全转义的字符串文字,例如,一个foo包含的变量bar'baz应在生成的脚本中显示为: qux='bar'\''baz' 通过附加"qux=$foo_esc"到脚本的其他行来编写。我是这样用Perl做到的: foo_esc="'`perl -pe 's/('\'')/\\1\\\\\\1\\1/g' <<<"$foo"`'" 但这似乎太过分了。 我仅靠bash并没有取得成功。我尝试了这些的许多变体: foo_esc="'${file//\'/\'\\\'\'}'" foo_esc="'${file//\'/'\\''}'" 但是要么多余的斜杠出现在输出中(当我这样做时echo "$foo"),否则它们会导致语法错误(如果从shell进行操作,则需要进一步的输入)。

2
如何避免字符串中bash变量后面的空格?
我有一个颜色变量。我用它通过在字符串内部求值来为字符串设置颜色。但是,我需要在名称后添加空格(以便名称不包含文本的一部分)。有时候看起来很糟。 如何避免使用(打印)该空间? 示例(假设Red=1和NC=2): echo -e "$Red Note: blabla$NC". 输出: 1 Note: blabla2. 预期产量: 1Note: blabla2.



4
是否可以使用Shell脚本打印变量内容的内容?(间接引用)
假设我已经声明了以下变量: $ var='$test' $ test="my string" 如果打印其内容,则会看到以下内容: $ echo $var $test $ echo $test my string 我想找到一种方法来打印的内容$var(即的内容$test)。因此,我尝试执行以下操作: $ echo $(echo $var) $test 但是这里的结果是$test,不是"my string"。。。是否可以使用bash打印变量内容的内容?

4
$ {!FOO}和zsh
${!FOO}在中执行双重替换bash,这意味着它接受FOO的(字符串)值并将其用作变量名。 zsh不支持此功能。 有没有一种方法,使这项工作同样在bash和zsh? 背景: 我有一个环境变量列表,例如 PATH MAIL EDITOR 并想先打印变量名,然后再打印它们的值。 这适用于bash但不适用zsh: for VAR in LIST do echo $VAR echo ${!VAR} done 应该可以通过某种方式实现“旧方法” eval,但是我无法使其正常工作: for VAR in LIST do echo $VAR echo `eval \$$VAR` done 我永远也不会理解为什么我不能简单地进行像${${VAR}}或什至${${${VAR}}}需要这样的任意深度替换,因此对此做一个解释也很好。


1
看到Bash变量的扩展进行调试了吗?
是否有任何工具/技巧可用于扩展变量以使bash代码更易于阅读? 例如,它将转换以下内容: DIR=/var/tmp FILE=${DIR}/file SCRIPT_ROOT=/opt/root TOOL=${SCRIPT_ROOT}/tool.sh ${TOOL} ${FILE} 至: DIR=/var/tmp FILE=/var/tmp/file SCRIPT_ROOT=/opt/root TOOL=/opt/root/tool.sh /opt/root/tool.sh /var/tmp/file 我正在将BASH代码转换为Python,并且读取BASH语法非常麻烦。

3
取消引用串联变量名
我可以做到这一点,但是它需要对变量进行字符串处理然后再取消引用。有什么办法可以将其简化为更简单的陈述? #!/bin/bash FRUITS="BANANA APPLE ORANGE" BANANA_COLOUR="Yellow" APPLE_COLOUR="Green or Red" ORANGE_COLOUR="Blue" for fruit in $( echo $FRUITS ); do fruit_colour="${fruit}_COLOUR" echo $fruit is ${!fruit_colour} done 我尝试了很多类似${!"${fruit}_COLOUR"}或\$${fruit}_COLOUR和其他许多变体的方法,但是唯一有效的方法是使用字符串。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.