问题标签 [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.
command - 用于构建复杂命令语法的 bash 脚本,先打印然后执行 - 变量扩展问题
我想创建 scipt 以促进从 Hive 生成本地文本文件提取。这基本上是执行如下命令:
虽然上面的工作就像一个魅力,但我发现通过参数化的以下脚本(非常简化)实现它非常有问题:
运行时我得到:Exception in thread "main" java.lang.NumberFormatException: For input string: "e"
我知道您可以打印文本或执行命令的方式有很多种。例如,该行echo $SQL
打印了我目录中的文件列表:
SELECT file1.txt file2.txt file3.txt file4.txt FROM dropme
而下一个:echo "SQL: $SQL"
给出了我想要的:SQL: SELECT * FROM dropme
echo "CMD: $EXTRACMD"
打印(几乎)要执行的命令。几乎,正如我\t
在 perl 代码中看到的那样:
CMD: hive -e "SET hive.cli.print.header=true;SELECT * FROM dropme"|perl -pe 'BEGIN{if(defined($_=<ARGV>)){s\w+\.//g;print}}s/(?: |^)\KNULL(?= |$)//g'>extract/outbound/dropme.txt
也许这仍然可以,但我想要的是能够将此命令复制并粘贴到(其他)终端并按照我放在顶部的命令执行。理想情况下,我希望该命令完全相同(所以在\t
那里)
当我尝试执行它时,我遇到的最大问题是(${EXTRACMD}
行)。我收到错误:
Exception in thread "main" java.lang.NumberFormatException: For input string: "e"
…等等,因为 bash 在这里将每个“单词”都视为单个命令,这与此无关。我假设我什至不知道真正尝试运行的是什么(之前的打印尝试显然没有帮助)
我知道我有多种选择,例如:
- 转义命令定义字符串中的特殊字符(就像我对双引号所做的那样)
- 试验 echo 和
$VAR
,'$VAR'
或"$VAR"
- 试验“${EXTRACMD}”或通过评估
eval "${EXTRACMD}"
- 试验
shopt -s extglob
或set -f
但是由于组合的数量非常多,并且以我的小 bash 经验,我觉得最好在这里寻求良好的做法,所以我的问题是:
有没有办法先打印(复杂/复合外壳)命令,然后能够执行它(完全按照打印输出)?在这种情况下,它将从顶部打印确切的命令,然后以与手动将该输出复制到终端提示符并按相同的方式执行它Enter。
ant - 如何在 Launch4j 配置文件中使用属性扩展
我使用 Launch4j 并将${dist}
在其配置中使用一个属性。
当任务和它的参数直接在build.xml
文件中时,它可以工作:
然而,Launch4j 可以使用它自己的 xml 配置文件,<launch4jConfig>
作为根元素:
在 ant.xml 中:
在 my_launch4j_config.xml 中:
在这种情况下,${dist}
没有扩展,也没有%dist%
我尝试过的所有内容......是否存在使用 launch4j 配置文件中的属性的解决方案?
bash - 防止`~`的扩展
我有一个脚本,它与远程主机同步一些文件。我要发出的命令的形式是
我的脚本如下所示:
但是~
总是被扩展,事实上我调用了命令
而不是上面那个。但是主目录的路径在本地不一定与服务器上的相同。我可以使用 egsed
来替换这部分,但是对于具有所有不同路径的多个服务器执行此操作非常繁琐。有没有一种方法可以~
在脚本运行时不扩展它的情况下使用,但仍然rsync
理解主目录的含义~
?
bash - 如何强制 bash 对字符串进行变量扩展?
我已经从文件中读取了一行 bash 代码,我想将它发送到日志中。为了使它更有用,我想发送该行的可变扩展版本。
我只想扩展 shell 变量。我不想解释管道,也不想产生任何副进程,比如用$( rm -r /)
.
我知道变量扩展深深地融入了 bash。我希望有一种方法可以只执行扩展,而不会产生任何副作用,这将来自管道、外部程序和——也许——here-documents。
也许有类似的东西eval
?
我想要一种仅扩展 shell 变量的方法。如果x=a
,a="example"
那么我想要以下扩展:
echo $x
应该是echo a
。
echo ${a}
应该echo example
touch ${!x}.txt
应该touch example.txt
if [ (( ${#a} - 6 )) -gt 10 ]; then echo "Too long string"
应该if [ 1 -gt 10 ]; then echo "Too long string"
echo "\$a and \$x">/dev/null
应该echo "\$a and \$x>dev/null"
for-loop - cmd for loop mass 再次重命名 oneliner
我对此感到头疼-已经花了太多时间搜索-显然我不了解CMD变量等的基础知识-它总是让我头疼
为什么这行不通?
for %a in (*) do ( set tmpx=%a & echo %tmpx% )
上面的代码在其他范围内输出 %tmpx% 的值 - 它始终是常量
是的,我运行 setlocal ENABLEDELAYEDEXPANSION
基本上我需要将文件夹中的所有文件从constantstring_somenameXX.tif简单重命名为somenameXX.tif,即constantstring=0000000005
我不得不使用 set 因为其他帖子正确地表明 for 循环中的 %a 具有特殊行为,并且替换不会照原样工作。
我宁愿不使用脚本和/或 powershell - 除非不使用它们是不可能的
谢谢你
powershell - 展开通过 Powershell 中的单引号存储的字符串变量
我有一个场景,我需要将 powershell 路径构建为$RemotePath = '$($env:USERPROFILE)\Desktop\Shell.lnk'
. 该变量被传递到需要执行的远程机器。远程机器将其作为字符串变量接收。如何扩展字符串以进行评估$env:USERPROFILE
?
bash - 为什么这个 Bash 路径名扩展没有发生?
我正在为 Bash 变量扩展而苦苦挣扎。请看以下代码:
由于扩展的顺序是大括号->波浪号->参数->....->路径名,为什么路径名扩展不像$a
第二个命令那样适用?
[添加]
空格转义是否对以下输出有隐藏行为?
java - 如何通过字符串访问(声明/赋值/获取值)变量?
如何在 Java 中使用字符串指定名称?
有什么可能的方法我可以做这样的事情吗?
sql - 使用 PERL 的 SQL 方言翻译
我有一个紧急工作,要在 PostGre 和 Amazon 的 RedShift 上工作的 SQL 产品,并将其移植到 Oracle 上工作。(请注意,“工作”目前并不意味着“最佳”,而是“正确”。)
我们所有的表都是使用 ORM (DBI) 定义的,但我们所有的视图当前都存储为内联 SQL。
我希望有一种相对简单的方法来运行以一种通用的方式封装 SQL,并使用一些现有的工具将其转换为特定方言的 SQL。
简单的例子:
SELECT CAST(x AS DECIMAL(16,4)) AS foo FROM bah
=>SELECT CAST(x AS NUMBER(16,4)) AS foo FROM bah
那很简单。我们在部署时有一个“查找和替换阶段”。SQL 存储为CAST(x AS #DECIMAL#(16,4))
,然后我们#DECIMAL#
根据部署到的方言替换为新字符串。
令人沮丧的例子:
SELECT x % y AS modulo FROM foo
=>SELECT MOD(x, y) AS modulo FROM foo
和...
SELECT x / y AS int_div FROM foo
=>SELECT trunc(x / y) AS int_div FROM foo
我不是 PERL 专家,所以我正在寻找有关如何进行某种宏扩展的指针。
- SQL 将与字符串中的某种宏表达式一起存储
- 将使用包括“dialect”和“sql”在内的参数调用“处理器”
- “dialect”参数将指示宏扩展的输出
无方言 SQL:SELECT #DIV(x,y)# AS z FROM foo
方言:RedShift
输出:SELECT x / y AS z FROM foo
方言:Oracle11g
输出:SELECT floor(x / y) AS z FROM foo
它需要处理子查询等:
无方言 SQL:SELECT #MOD(x, (SELECT MAX(y) FROM bah))# AS z FROM foo
方言:RedShift
输出:SELECT x % (SELECT MAX(y) FROM bah) AS z FROM foo
方言:Oracle11g
输出:SELECT mod(x, (SELECT MAX(y) FROM bah)) AS z FROM foo
或者任何用于存储“通用”SQL 并能够将其转换为“特定方言”SQL 的可靠方法。
bash - 从 xargs 获取原始返回值或模拟 xargs
我正在使用 bash。我有一个包含Java 程序命令行参数的文件F,我需要存储Java 程序的两个输出,即标准输出的输出和退出值。存储标准输出通过
但是 xargs 不允许访问 Java 程序的退出代码。好吧,我拆分它,运行程序两次,一次用于标准输出,一次用于退出代码 --- 但是获取退出代码并正确运行它似乎是不可能的。一个人可能会尝试
但如果 F 包含例如“”,即程序的一个命令行参数,它是一个空格,则这不起作用。问题是参数 $(cat F) 的扩展。
现在我没有办法解决这个问题?我不想要“$(cat F)”,因为我希望 $(cat F) 扩展为许多字符串 --- 但我不希望进一步扩展这些字符串。
另一方面,如果有更好的 xargs,可以访问原始退出值,那将解决问题,但我不知道这一点。