假设我帐户的默认 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) 使用扩展的 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 函数名称
我不认为运算符(减法“-”)应该是名称的一部分。
如果我在单词之间用破折号-
而不是下划线命名一个函数或脚本_
,那会不会很糟糕?例如,function duplicate-me()
或duplicate-me.sh
。
在 bash 中,变量名可以包含下划线但不能包含破折号。如果我使用破折号而不是下划线命名函数和脚本,那么 bash 永远不会打算将这样的名称解释为变量,如果我将这样的名称误用为变量,我可以期望 bash 给出错误消息。
谢谢。