我想将参数传递给 shell 脚本,但我得到的noglob on
是输出参数。
灰
#!/bin/ksh
set filec on
set noglob on
echo $@
当我使用参数 123 运行 shell 脚本时,我得到的输出如下,而不是 123。即使我已经尝试过unset noglob
,set noglob off
但仍然得到相同的输出。请帮助我克服这个问题。
@sh a.sh 123
noglob on
答案1
我认为你打算这样做:
set -o filec
set -o noglob
set
不带任何选项的参数会将参数设置为 shell 的参数。从man mksh
:
可以使用 +-o 更改选项选项语法,其中 option 是选项的长名称,或使用 +-信语法,其中信 是选项的单字母名称(并非所有选项都有单字母名称)。
(但至少我找不到名为filec
in 的shell 选项。)mksh
答案2
当使用类似 shellset
中的方式时sh-
:
set noglob on
实际上,您可以$@
通过将命令行上给出的参数替换为 和 来noglob
进行修改on
(就像您使用 调用脚本一样sh a.sh noglob on
)。
要设置 shell 选项noglob
,请使用
set -o noglob
据我所知,也sh
没有ksh
名为 的 shell 选项。filec
请注意,如果您使用显式解释器(如 )调用脚本sh
,#!
则 - 行将被忽略。
由于您的脚本看起来像 atcsh
或csh
脚本(set
语法绝对正确,这些 shell 也有一个filec
shell 选项,但据我所知,该$@
变量不在其中):csh
如果它是您正在编写的csh
ortcsh
脚本,然后确保使用 or 调用该脚本,或者csh
,tcsh
如果该脚本是可执行的并且在没有显式解释器的情况下调用,则该#!
行指向这两个中适当的一个。
简而言之,确保您知道编写脚本所用的语言并使用正确的解释器。