相关疑难解决方法(0)

哪个 shell 解释器运行一个没有 shebang 的脚本?

假设我帐户的默认 shell 是 zsh,但我打开了终端并启动了 bash 并执行了一个名为 的脚本prac002.sh,哪个 shell 解释器将用于执行脚本,zsh 还是 bash?考虑以下示例:

papagolf@Sierra ~/My Files/My Programs/Learning/Shell % sudo cat /etc/passwd | grep papagolf
[sudo] password for papagolf: 
papagolf:x:1000:1001:Rex,,,:/home/papagolf:/usr/bin/zsh
# papagolf's default shell is zsh

papagolf@Sierra ~/My Files/My Programs/Learning/Shell % bash
# I fired up bash. (See that '%' prompt in zsh changes to '$' prompt, indicating bash.)

papagolf@Sierra:~/My Files/My Programs/Learning/Shell$ ./prac002.sh 
Enter username : Rex
Rex
# Which interpreter did it just use?
Run Code Online (Sandbox Code Playgroud)

**编辑:** 这是脚本的内容

papagolf@Sierra ~/My Files/My Programs/Learning/Shell …
Run Code Online (Sandbox Code Playgroud)

shell bash zsh shell-script shebang

23
推荐指数
2
解决办法
1万
查看次数

Shell 有效函数名字符

使用扩展的 Unicode 字符(毫无疑问)对许多用户很有用。

更简单的 shell(ash(busybox)、dash)和 ksh 会失败:

tést() { echo 34; }

tést
Run Code Online (Sandbox Code Playgroud)

但是似乎允许它。

我知道 POSIX有效函数名称使用Names 的这个定义。这意味着这个正则表达式:

[a-zA-Z_][a-zA-Z0-9_]*
Run Code Online (Sandbox Code Playgroud)

但是,在第一个链接中还说:

实现可能允许函数名称中的其他字符作为扩展名。

问题是:

  • 这是否被接受并记录在案?
  • 在哪里?
  • 对于哪些壳(如果有)?

相关问题:是否
可以在 shell 函数名称中使用特殊字符?
我对在函数名称中使用元字符 (>) 不感兴趣。

包含“-”的 Upstart 和 bash 函数名称
我不认为运算符(减法“-”)应该是名称的一部分。

shell bash zsh function

14
推荐指数
2
解决办法
8522
查看次数

函数或脚本名称包含破折号“-”而不是下划线“_”会不会很糟糕?

如果我在单词之间用破折号-而不是下划线命名一个函数或脚本_,那会不会很糟糕?例如,function duplicate-me()duplicate-me.sh

在 bash 中,变量名可以包含下划线但不能包含破折号。如果我使用破折号而不是下划线命名函数和脚本,那么 bash 永远不会打算将这样的名称解释为变量,如果我将这样的名称误用为变量,我可以期望 bash 给出错误消息。

谢谢。

bash conventions

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

标签 统计

bash ×3

shell ×2

zsh ×2

conventions ×1

function ×1

shebang ×1

shell-script ×1