问题标签 [parameter-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 投票
2 回答
855 浏览

python - 使用 Sqlalchemy 连接和 Postgres 从原始字符串编译查询(不使用 .text(...))

我正在使用 Sqlalchemy 1.3 连接到 PostgreSQL 9.6 数据库(通过 Psycopg)。

我有一个非常非常原始的 Sql 字符串,它使用Psycopg2语法格式化,由于一些遗留问题,我无法修改:

statement_str = SELECT * FROM users WHERE user_id=%(user_id)s

注意%(user_id)s

我可以很高兴地使用 sqlalchemy 连接执行它,只需执行以下操作:

它工作正常。我得到了我的用户,一切都很好。

现在,出于调试目的,我希望将%(user_id)s参数扩展为实际值的实际查询。例如:如果user_id = "foo",则得到SELECT * FROM users WHERE user_id = 'foo'

我已经看到大量sqlalchemy.text(...)用于生成语句然后获得编译版本的示例。多亏了其他答案,比如这个这个str,当我有一个 SqlAlchemy 查询时,我能够产生一个像样的答案。

但是,在这种特殊情况下,由于我使用的是更特定于游标的语法,%(user_id)所以我不能这样做。如果我尝试:

text(statement_str).bindparams(user_id="foo")

我得到: This text() construct doesn't define a bound parameter named 'user_id'

所以我想我正在寻找的是

但我无法得到那个。

0 投票
2 回答
56 浏览

bash - BASH 脚本中程序标志的复制和扩展

我正在使用一个组合单个文件的程序,并且我正在将该程序合并到我正在组合的 BASH 管道中。该程序需要为每个文件设置一个标志,如下所示:

为了允许脚本处理任意数量的样本,我想读取目录中的各个文件名,并在“-V”标志之后展开每个文件的路径。

我尝试使用以下内容将文件路径添加到变量中,但没有成功进行适当的扩展:

任何帮助是极大的赞赏!

0 投票
3 回答
204 浏览

bash - bash中opts=${1:+--host $1}是什么意思?

在一个 bash 脚本中,我偶然发现了这段代码:

通过测试,我发现它可以$opts扩展到--host $1任何东西$1
我想知道这种语法的目的是什么。为什么不简单地使用opts="--host $1"

这是将选项传递给命令的特定方式吗?

0 投票
3 回答
362 浏览

bash - 如何在shell的变量中保留/删除数字?

我有一个变量,例如:

我想提取:

  • 只有非数字部分(即 /dev/sda)
  • 只有数字部分(即 1)

我将在需要磁盘和分区号的脚本中使用它。我怎样才能在 shell 中做到这一点(主要是 bash 和 zsh)?

我正在考虑使用Shell 参数扩展,但在文档中找不到工作模式。

基本上,我试过:

但没有一个奏效。两人都回来了/dev/sda1

0 投票
0 回答
165 浏览

arrays - 负长度的 Bash 数组子集

在 Bash 中,我可以使用${parameter:offset:length}符号对数组的元素进行切片,但我不能以与切片字符串时相同的方式使用它。具体来说,我想使用这种语法来打印除了n数组的最后一个元素之外的所有元素:

注意:--version输出是元语法,而不是我的问题的意图

此行为在Parameter Expansion下定义:

如果参数是'@',则结果是从偏移量开始的长度位置参数。相对于大于最大位置参数的 1 采用负偏移量,因此 -1 的偏移量计算为最后一个位置参数。如果长度计算为小于零的数字,则为扩展错误。

我目前使用两种解决方法:

有没有更好的办法?蟒蛇的A[2:-1]孩子们在取笑我。

0 投票
0 回答
41 浏览

bash - 如何获取最后一个字段并将其传递?

我已经尝试下一个脚本

预期结果:

实际结果:

有没有人遇到过这个?

0 投票
0 回答
186 浏览

bash - bash:参数扩展,使用默认值:当扩展已经被引用时,是否应该引用单词?

在脚本中,我将变量传递给汇编程序 (NASM),我希望这些变量由汇编程序作为字符串处理。这意味着正在执行的程序应该在文字文本周围接收成对的引号。(为了确保作为文本处理,在某些情况下,我会在字符串周围放置嵌套引号,例如“'...'”,即在内容周围的单引号周围加上双引号。)当不传递文本时(空字符串),应该传递两个没有内容的引号。

我正在使用参数扩展,特别是使用默认值类型,在 bash 手册页中描述如下:

${parameter:-word}

使用默认值。如果 parameter 未设置或为 null,则替换 word 的扩展。否则,参数的值被替换。

这是我使用使用默认值参数扩展的示例:https ://bitbucket.org/ecm/ldebug/commits/f9b7def927cab0568e30dd9480e9d9b31f46b99f#Lsource/mak.shT58 -D_REVISIONID_SYMSNIP="${build_revision_id_symsnip:-''}"

对此进行测试,似乎word允许使用双引号,但不需要。

那么,我应该在周围加上双引号word还是可以,甚至首选,没有?

0 投票
2 回答
2266 浏览

regex - 双插入符号的参数扩展^^

在下面的代码块中,如何评估第 3 行和第 4 行?

0 投票
3 回答
86 浏览

bash - Bash - 将变量扩展为另一个变量名

假设我有这些变量:

我想获得 的值VAR_AVAR_B基于 的值X

这是有效的,并给出resultA

我的问题是,是否有一个单线?

因为如果不是扩展的变量的全名,间接扩展似乎不起作用。我试过了:

......还有很多其他组合,但它总是写“坏替换”......

0 投票
1 回答
101 浏览

zsh - 嵌套参数扩展未按预期工作

zsh说:

${name}

替换参数名称的值(如果有)。

然后它还说:

如果使用 ${...} 类型参数表达式或 $(...) 类型命令替换代替上面的 name,则首先扩展它,并将结果用作 name 的值。

我的问题是为什么以下内容不起作用,假设我理解正确,即变量名可以嵌套?