问题标签 [variable-expansion]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
34 回答
72524 浏览

bash - 从 Bash 中的 $PATH 变量中删除路径的最优雅的方法是什么?

或者更一般地说,如何从 Bash 环境变量中以冒号分隔的列表中删除项目?

我以为我在几年前看到了一种简单的方法,使用更高级的 Bash 变量扩展形式,但如果是这样,我已经忘记了它。对 Google 的快速搜索结果出乎意料地少,而且没有一个我称之为“简单”或“优雅”的结果。例如,分别使用 sed 和 awk 的两种方法:

没有直接的东西存在吗?有什么类似于 Bash 中的 split() 函数的吗?

更新:
看来我需要为我故意含糊的问题道歉;我对解决特定用例的兴趣不如对引发良好讨论的兴趣。幸运的是,我明白了!

这里有一些非常聪明的技巧。最后,我在我的工具箱中添加了以下三个功能。魔术发生在 path_remove 中,它主要基于 Martin York 巧妙地使用awk's RS 变量。

那里唯一真正的麻烦是使用sed删除尾随冒号。不过,考虑到 Martin 的解决方案的其余部分是多么简单,我非常愿意接受它!


相关问题:如何在 shell 脚本中操作 $PATH 元素?

0 投票
2 回答
11300 浏览

vim - 如何在 vim 命令中扩展变量?

我正在尝试在命令调用中扩展变量。这是我的.vimrc

:提示符下,`=flist`语法似乎有效(或者,至少它对w:变量有效),但在.vimrc文件中它不起作用 - TlistAddFiles 只是传递了 string `=flist`


感谢 Andrew Barnett 和 Mykola Golubyev 的回答,我现在有了这个,这似乎有效。没有更好的办法吗?

0 投票
1 回答
2442 浏览

batch-file - 批处理文件 FOR/f 扩展

我有一个directories.txt包含目录名称的文件 ( ),每个文件都在一行中,我喜欢扩展该行

在我的脚本中以真实用户名运行脚本。然而,回声与线完全相同,%USERNAME%不会扩展。

回显显示“C:\Documents and Settings\%USERNAME%\My Documents”而不是 C:\Documents and Settings\ janco \My Documents

有任何想法吗?

0 投票
2 回答
3451 浏览

bash - 当前路径的 Bash 引用 (pwd)

PWD当当前路径包含空格时,我遇到了变量上发生的最烦人的问题。我的代码看起来有点像这样:

这很好用,除非当前路径包含空格字符。如果是,$(pwd)则扩展为

而不仅仅是
p>

这会导致 sed 表达式混乱(因为额外的引号):

我注意到像这样扩展 pwd 无济于事${PWD//\'/}

关于如何解决这个问题的任何想法?

0 投票
3 回答
1489 浏览

java - 替换文本中的变量:建议?

我正在寻找一个不错的模板引擎或一小段代码来在 Java 中的字符串中扩展类似 Ant 的变量。例子:

它至少应该支持java.util.Map,但也欢迎可以处理 bean 或递归查找或在映射/对象列表中查找的东西。

建议?

[编辑] 回复 TofuBeer:没有嵌套,只有{}. 以外的任何内容${}都应逐字复制。$$应该变成$``. If that's not possible ${dollar}应该扩展为单个$(这样你就可以表达15.00 $)。

0 投票
1 回答
1407 浏览

batch-file - 在 DOS 批处理中将任意变量扩展为驱动器、路径等

我正在使用一个 dos 批处理,它使用传递的参数处理文件:

进程.bat:

我们可以看到参数被扩展为批处理中的文件名:%~n1. 但是,我被要求重写批处理以从文本文件中读取参数:

参数.txt

所以我修改了process.bat

但是 %~nP2% 不起作用。

我发现这for /f "tokens=*" %%A in (%P1%) do %%~dA可以帮助我,但看起来很麻烦。

那么有没有其他方法可以将任意变量扩展为名称、驱动器、路径等?

0 投票
3 回答
7252 浏览

bash - 由于用空格扩展变量而导致的 Grep 错误

我有一个名为“ physics 1b.sh”的文件。在 bash 中,如果我尝试

grep 抱怨:

但是,当我这样做时

它工作正常。所以我猜这个问题与变量没有被扩展以包含 grep 需要识别空间的反斜杠有关。我怎样才能让它工作?

使用 bash 3.2,mac os 10.6。

编辑:
没关系,问题是 x 设置为" physics 1b",但是当我 echo $x 检查内容时,bash 切掉了前面的空格,所以我看不出它有什么不同。上面的第一种方法确实有效。

0 投票
2 回答
285 浏览

bash - 如何在不破坏布局的情况下回显 $command

我正在尝试在 bash 脚本中执行以下操作:

它可以工作,但是回显会破坏输出(而不是将所有行都放在一列中,而是将它们全部放在一行中)。

如果我这样做:ssh host ls -lh在 CLI 中它会给我正确的输出和布局。

回显变量时如何保留布局?

0 投票
2 回答
391 浏览

perl - 删除 case 子句: sed 正则表达式中的 bash 扩展: X='a\.b' ;Y=';;' sed -n '/${X}/,/${Y}/d'

我正在尝试从 bash 脚本中删除 case 子句。该子句会有所不同,但始终将反斜杠作为大小写匹配字符串的一部分。

我正在尝试 sed 但可以在 bash 脚本中使用 awk 或 perl one-liner。

编辑的目标很简单,类似于:

我正在与转义反斜杠、分号或两者的变量扩展发生冲突。如果我“评估”,我会去掉我的反斜杠转义符。如果我不这样做,分号就会赶上我。所以我尝试在 sed 中进行 subshel​​l 扩展。正如我所写的那样,这会使解释器犯规。更多地转义分号似乎无济于事。

还有这个:

0 投票
8 回答
79411 浏览

windows - Windows 命令解释器 (CMD.EXE) 如何解析脚本?

我遇到了ss64.com,它为如何编写 Windows 命令解释器将运行的批处理脚本提供了很好的帮助。

但是,对于批处理脚本的语法,事物如何扩展或不扩展,以及如何对事物进行转义,我一直找不到很好的解释。

以下是我无法解决的示例问题:

  • 报价系统如何管理?我制作了一个TinyPerl脚本
    foreach $i (@ARGV) { print '*' . $i ; }),编译它并以这种方式调用它:
    • my_script.exe "a ""b"" c"→ 输出是 *a "b*c
    • my_script.exe """a b c"""→ 输出*"a*b*c"
  • 内部echo命令如何工作?该命令内部扩展了什么?
  • 为什么我必须for [...] %%I在文件脚本中使用,但for [...] %I在交互式会话中?
  • 什么是转义字符,在什么上下文中?如何逃避百分号?例如,我怎样才能%PROCESSOR_ARCHITECTURE%从字面上回应?我发现这echo.exe %""PROCESSOR_ARCHITECTURE%行得通,有更好的解决方案吗?
  • 双如何%搭配?例子:
    • set b=a, echo %a %b% c%%a a c%
    • set a =b, echo %a %b% c%bb% c%
  • 如果该变量包含双引号,如何确保变量作为单个参数传递给命令?
  • set使用命令时变量如何存储?例如,如果我这样做set a=a" b,然后echo.%a%我获得a" b. 但是,如果我echo.exe从 UnxUtils 使用,我会得到a b. 如何%a%以不同的方式扩展?

谢谢你的灯。