在“Linux Shell脚本编写指南”一书中
它说 $@
扩展为 $1
、$2、$
3 等等,$*
扩展为 $
1c$2c$3
,其中 c
是 IFS
的第一个字符。
$@
和 $*
之间有什么区别,IFS
是什么意思?
手册中给出的解释很难改进。例如,破折号(1)
表示:
展开到位置参数,从1开始。当展开发生在双引号内时,每个位置参数都作为单独的参数展开。如果没有位置参数,则@
的展开会生成零个参数,即使@
是双引号。这基本上意味着什么,例如,如果1美元
是“abc
”并且2美元
是“def ghi
”,那么"$@"
扩展到两个参数:"abc"
"def ghi"
我们可以通过一些示例演示$*
和$@
之间的区别:
$ set 1 "2 3"
$ printf '"%s"\n' "$@"
"1"
"2 3"
$ printf '"%s"\n' $@
"1"
"2"
"3"
$ printf '"%s"\n' "$*"
"1 2 3"
$ printf '"%s"\n' $*
"1"
"2"
"3"
手册页还描述了IFS
:
输入字段分隔符。这通常设置为 ⟨空格⟩、⟨tab⟩ 和 ⟨换行符⟩。有关更多详细信息,请参阅空格拆分部分。
IFS是内部字段分隔符,它基本上表示shell识别的分隔单词的内容。
所以要运行以下命令
IFS=$'\n'
会导致shell将新行识别为分隔符。
$是赋给变量的符号
然而,这些数字是为脚本输入保留的。
所以1美元是一个可变输入,2美元是第二个可变输入。
$@是传递给脚本的所有参数。
所以如果你运行这个命令
bash command.sh bork woof meow
这将是上面列出的变量的值
$1 = bork
$2 = woof
$3 = meow
$@ = bork woof meow
问题内容: 认为标题总结了问题:-) 问题答案: 脚本通常是直接运行的代码,由其本身运行。模块通常是由其他代码段导入的库。 请注意, 没有内部区别 -两者都是可执行的和可导入的,尽管直接执行时库代码通常不执行任何操作(或仅运行其单元测试),而导入设计为脚本的代码将导致其执行,因此通用测试。
这些函数似乎在 React 教程中可以互换使用,但无法找出区别...或者什么时候使用哪个?
我有一个谷歌表,我想从我们的服务器更新它的数据。目前我正在使用谷歌工作表脚本编辑器。 但是我开始意识到还有另一种方法可以更新我的谷歌表格。那就是使用谷歌表单apihttps://developers.google.com/sheets/api/samples/writinghttps://developers.google.com/sheets/api/reference/rest/https:/
我是Rust的新手。我认为用于将标识符导入当前范围,用于声明外部模块。但是这种理解(可能是错误的)对我来说没有任何意义。有人能解释一下为什么Rust有这两个概念以及适合使用它们的情况吗?
问题内容: 我只是想知道为什么我们通常在两个布尔之间使用逻辑OR 而不是按位OR ,尽管它们都运行良好。 我的意思是,请看以下内容: 我们可以代替使用吗?与和相同。 问题答案: 如果您使用和形式,而不是这些运算符的和形式,则Java不会费心地单独评估右手操作数。 这是您是否希望缩短评估时间的问题-在 大多数情况 下都是如此。 说明短路好处的一个好方法是考虑以下示例。 正如Jeremy和Peter提
问题内容: Jenkins在调用命令时使用什么外壳?我在Linux机器上运行Jenkins。 问题答案: 从“执行外壳”部分的帮助/问号图标中: 运行用于构建项目的Shell脚本(默认为sh,但这是可配置的)。 如果转到Manage Jenkins-> Configure System,您将找到一个选项(称为“ Shell可执行文件”)来设置您希望您的Shell脚本使用的Shell的名称或绝对路径