标签: ksh

为什么不允许使用数字函数名称?

考虑以下:

$ ksh -c '1(){ echo hi;};1'
ksh: 1: invalid function name
$ dash -c '1(){ echo hi;};1'
dash: 1: Syntax error: Bad function name
$ bash -c '1(){ echo hi;};1'
bash: `1': not a valid identifier
bash: 1: command not found
$ mksh -c '1(){ echo hi;};1'
hi
Run Code Online (Sandbox Code Playgroud)

基本上,我试图声明函数10这将是trueand 的简写false,但是正如您所看到的,我在函数中使用数字名称时遇到了问题。别名和两位数名称也会发生相同的行为。

问题是“为什么”?它是 POSIX 强制要求的吗?或者只是像伯恩一样的贝壳的怪癖?

另请参阅相关的问题

command-line bash dash-shell ksh

10
推荐指数
3
解决办法
1683
查看次数

这些辅助文件描述符是什么?

在浏览/proc/self我的mkshshell 的文件夹时,我发现了一个奇怪的事情:在/proc/self/fd/*所有的标准文件描述符中(0 表示标准输入,1 表示标准输出,2 标准错误)一些文件描述符,还有一些额外的 - 24、25、3 . 从技术上讲,我可以在 shell 中使用 glob 列出它们:

$ for fd in /proc/self/fd/* ; do echo $fd ; done                                                      
/proc/self/fd/0
/proc/self/fd/1
/proc/self/fd/2
/proc/self/fd/24
/proc/self/fd/25
/proc/self/fd/3
Run Code Online (Sandbox Code Playgroud)

但是当我尝试stat使用它们或使用find它们时,它们被报告为不存在。

$ find  /proc/self/fd/*                                                                               
/proc/self/fd/0
/proc/self/fd/1
/proc/self/fd/2
find: ‘/proc/self/fd/24’: No such file or directory
find: ‘/proc/self/fd/25’: No such file or directory
/proc/self/fd/3
Run Code Online (Sandbox Code Playgroud)

同样发生在bash,但只有一个辅助文件描述符。

$ for fd in /proc/self/fd/* ; do echo $fd; done
/proc/self/fd/0
/proc/self/fd/1
/proc/self/fd/2
/proc/self/fd/255
/proc/self/fd/3 …
Run Code Online (Sandbox Code Playgroud)

command-line bash ksh

9
推荐指数
1
解决办法
4589
查看次数

为什么ksh中的“[[”和“-e xxx”之间需要空格?

例如,以下命令不起作用:

if [[-e xyz]]; then echo File exists;fi
Run Code Online (Sandbox Code Playgroud)

ksh 给出以下错误

[[-e: command not found
Run Code Online (Sandbox Code Playgroud)

那是因为“[[-”不明确吗?

command-line syntax ksh

9
推荐指数
1
解决办法
2345
查看次数

我如何更改为 ksh?

我需要了解一些 ksh 细节,但我不想永久地从 bash 更改为 ksh。

我该怎么办?

是否可以仅为特定的控制台会话更改 shell?

command-line ksh

7
推荐指数
1
解决办法
9832
查看次数

标签 统计

command-line ×4

ksh ×4

bash ×2

dash-shell ×1

syntax ×1