问题标签 [typeset]
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.
python - 了解 PythonPath 的 Typeset
有人显然只在 .zshrc 中向我推荐了以下代码,而没有清楚地解释其目的。
我对如何使用 .bashrc 中的代码感兴趣。我的 Bash 对这个命令感到不安。
如何在 Bash 中使用该命令?
shell - korn typset 选项 -t (tag) 用于什么?
我正在阅读 Korn排版命令并发现该-t
选项添加了一个标签,但我无法弄清楚它的用途。有人有例子吗?
-t 标记名称。标签是用户可定义的,对 shell 没有特殊意义。
shell - 是否结合 KornShell 脚本中的嵌套函数调用来解释导出和排版之间的区别?
我遇到了 KornShell (ksh) 脚本在 ksh88 和 ksh93 上以不同方式运行的问题,其中调用函数的函数处理方式不同,使用排版和导出声明的变量。这是一个突出差异的示例脚本:
在运行 ksh93 的 Linux 机器上运行时的结果如下:
如您所见,当 TEST_VALUE 被排版时,当控制权返回到外部函数时,内部设置的 TEST_VALUE 的值会丢失。当通过导出声明 TEST_VALUE 时,当控制权返回到外部时,内部设置的值将被保留。
由于在外部函数调用内部函数时没有调用新进程,所以我不明白为什么要使用 export 以使变量保持子函数中的范围。我还注意到 typeset -x 的行为与 typeset 相同,而我希望 typeset -x 等同于导出。
当我在运行 ksh88(AIX、Solaris、HP-UX)或 pdksh (Linux) 或 MKS ksh 的机器上运行此程序时,typeset、typeset -x 和 export 在此示例中的行为相同。
现在我已经将排版更改为导出,以便为使用在 ksh88 上开发和测试的类似代码的程序提供 ksh93 上的兼容性。
也许这是一个 ksh93 缺陷?
ksh - 采购包含“typeset -r”的脚本的未知错误,该脚本包含在命令替换中
我希望获取一个脚本,打印该脚本定义的变量的值,然后将该值分配给命令行上的一个变量,命令替换包含源/打印命令。这适用于 ksh88 但不适用于 ksh93,我想知道为什么。
在 ksh88(本例中为 AIX 6.1 机器)上运行时,输出如下:
在 ksh93(本例中为 Linux 机器)上运行时,输出如下:
($A 未定义)
以上只是一个示例脚本。我希望完成的实际事情是获取一个为许多变量设置值的脚本,这样我就可以只打印它的一个值,例如$DIR
,并且具有$A
相等的值。我事先不知道 的值$DIR
,但我需要$DIR
在执行不同的批处理脚本期间将文件复制到。因此,我的想法是获取脚本以定义其变量,打印我想要的那个,然后通过$(...)
语法将该打印的输出分配给另一个变量。诚然有点 hack,但我不想在批处理脚本的环境中获取整个子脚本,因为我只需要它的一个变量。
开头的 typeset -r 代码是错误的。我正在采购的脚本包含这个以提供各种信号量 - 以防止脚本在环境中被多次采购。(实际脚本中有一个 if 语句检查_typeset_var = 1
,如果它已经设置则退出。)所以我知道我可以把它拿出$DIR
来打印出来,但问题的限制包括保留typeset -i -r
.
在示例脚本中,我首先输入unset
了一个,以确保_typeset_var
尚未定义。typeset -r
顺便说一句,根据 ksh93 的 ksh 手册页,我确实知道无法取消设置变量。
有一些方法可以解决这个错误。现在最喜欢的是不使用排版,而只是设置没有排版的信号量(例如_typeset_var=1
),但是代码原样的错误对我来说仍然是一个好奇心,我想看看是否有人能解释为什么会发生这种情况。
顺便说一句,我放弃的另一个想法是grep
从它的包含脚本中删除我需要的变量,然后打印一个$A
要设置的变量;但是,变量($DIR
在上面的示例中)可能被设置为另一个变量的值(例如DIR=$dom/init
),并且该其他变量可能在脚本的前面定义;因此,我需要获取整个脚本以确保我定义了所有变量,以便$DIR
在采购时正确定义。
shell - KSH Shell 双变量名称?
我正在尝试基于 $i 创建一个变量
当我这样做时,我得到以下输出
预期的输出是
事实上,当我回显 $String1 时……我得到了预期的输出……所以它的存储正确。我知道它是我调用 $string$1 的方式......但我尝试了各种引号/括号,但它不起作用。有人可以告诉我如何调用我的变量吗?
linux - 如何在 shell 脚本中获得函数列表?
我想在 shell 脚本(我正在采购的 shell 脚本函数库)中生成所有函数的列表。目前,我正在尝试以下方式排版:
我遇到的一个困难是列出了一些不在函数库中的函数,我不知道如何从函数列表中删除这些函数或如何以更好的方式生成函数列表。我欢迎您对此有任何想法。
一个好处是按照函数在 shell 脚本中出现的顺序生成函数列表。
bash - 在 ksh 中使用“typeset -r”和“readonly”关键字确定范围异常
function
首先,在使用关键字 vs.声明函数时,我知道 bash 和 ksh 之间的一般范围界定差异(动态/静态),myfunction()
并且这篇文章仅讨论有关只读变量的范围界定问题。
不过,今天我偶然发现了一些让我感到困惑的事情。我有一个脚本,它从使用关键字声明的函数中获取文件function
(因此,当我通过“全局范围护目镜”查看这些单独的文件时,我并没有立即意识到为什么会发生以下情况)。作为最近清理的一部分,我将这些源文件中的各种变量设置为只读,并注意到代码的某些部分在 ksh93 下停止工作,这取决于我如何将变量标记为只读。更具体地说,如果我使用readonly FOO=bar
,${FOO}
将对源文件的其余部分取消设置。
这说明了问题:
(注意:内联代码的行为是相同的(与获取源代码的第二个脚本相比),但由于它在这里保存了一些行并且帖子已经很长了,所以我保持原样)
readonly_test_sourced.sh:
readonly_test.sh:
这是我使用 ksh93u+ 得到的输出:
这就是我在 bash 4.2 中得到的:
我还通过 mksh 运行它(它根据其手册页实现动态范围,它确实产生与使用 bash 相同的结果):
观察:
readonly
有时typeset -r
是同义词,有时不是bash 和 mksh
有 3 种可能的不同情况(对于 f 和 g):
- [1]
readonly foo=function
赋值'function'
给全局变量foo
,不声明新的局部变量(与 [4] 相同) - [2]
typeset -r bar=function
分配'function'
给新的局部变量bar
(与 [3] 相同) - [3]
typeset baz=function; readonly baz
分配'function'
给新的局部变量baz
(与 [2] 相同) - [4]
qux=function; readonly qux
分配'function'
给全局变量qux
并且不声明新的局部变量(与 [1] 相同)。qux
在本地和全局范围内都是只读的,但这是可以预期的,因为它将全局变量标记为只读,并且由于动态范围,它在函数中也变为只读(旁注:另请参见)。 - [5]
quux=function; typeset -r quux
赋值'function'
给全局变量quux
,然后声明一个quux
没有值的新局部变量
- [1]
readonly
从不声明新的(局部)变量(如预期的那样)。对于 [1] 和 [4],它将全局变量标记为只读,对于 [3],它标记新的局部变量。这完全是我所期望的,这意味着readonly
运行的范围与相应变量本身的范围相同,即x=y
; if$x
is local thenreadonly x
会将局部变量标记为x
只读x=y
; 如果$x
是全局的,那么readonly x
会将全局变量标记为x
只读
[1] / [2] 和 [4] / [5] 之间的一致性,分别
在 ksh 中(讨论 f;g 的行为符合预期):
- 还有3种可能的不同情况:
- [6]
readonly foo=function
:类似于 [5]、[8] 和 [9],但更令人困惑,因为这是一个单一的命令(相对于:先赋值,readonly
后赋值typeset -r
)。显然readonly
声明了一个foo
没有值的新局部变量,但将全局变量设置foo
为'function'
. ?!?.foo
在函数和全局范围内都变为只读。 - [7]
typeset -r bar=function
分配'function'
给新的局部变量bar
(与 [8] 相同) - [8]
typeset baz=function; readonly baz
分配'function'
给新的局部变量baz
(与 [7] 相同)。baz
仅在函数范围内变为只读 - [9]
qux=function; readonly qux
分配'function'
给全局变量qux
,然后声明一个qux
没有值的新局部变量(与 [5]、[6]、[10] 相同)。qux
仅在函数范围内变为只读 - [10]
quux=function; typeset -r quux
分配'function'
给全局变量quux
,然后声明一个quux
没有值的新局部变量(与 [5]、[9]、[10] 相同)。quux
仅在函数范围内变为只读。
- [6]
readonly
似乎在 [6] 和 [9] 中声明了新的局部变量,但在 [8] 中没有。
- 还有3种可能的不同情况:
bash 的行为是预期的。typeset
(= declare
) 在函数范围内创建/修改(bash 可以-g
选择强制在全局范围内创建/修改,即使在函数内部使用),readonly
实际上只是“标记”现有变量,从不引入新的局部变量。[5] 让我有点困惑,因为我之前从未声明过未设置的只读变量,我会假设如果存在同名的全局变量,它会修改它,但我绝对可以忍受这种行为,因为它是一致的与其他场景和存在-g
。
但是,据我了解,ksh 手册页无法完全解释上述所有场景以及关键字readonly
和typeset -r
关键字之间的细微差别,除非我在重新阅读问题中的相应部分时遗漏了某些内容。最让我困惑的是,它在 and 之间的作用域差异的解释附近没有提到关键字,readonly
并且内置的简短解释也没有提到任何关于此的内容。基于此,我永远不会假设像 do 那样引入新的、静态范围的变量,而且在某些(但不是全部)场景中这样做似乎真的出乎意料。foo()
function bar
readonly
readonly
typeset -r
对我来说最令人困惑的场景是 [6],我无法理解那里到底发生了什么(这也是破坏我的代码的特定场景)。
我的观察是否正确,有人可以阐明 ksh93 的行为吗?(我希望这个问题的范围可以接受(没有双关语))
unix - ksh 中未找到排版错误
我写了一个像 typeset -l target_tbl 这样的语句。我收到 typeset : not found 的错误。
我在提示下运行了相同的语句。它执行成功。我在脚本中收到此错误。谁能指导我?
谢谢!