从 $@ 变量中删除 noglob

从 $@ 变量中删除 noglob

我想将参数传递给 shell 脚本,但我得到的noglob on是输出参数。

#!/bin/ksh
set filec on
set noglob on
echo $@

当我使用参数 123 运行 shell 脚本时,我得到的输出如下,而不是 123。即使我已经尝试过unset noglobset noglob off但仍然得到相同的输出。请帮助我克服这个问题。

@sh a.sh 123 
noglob on

答案1

我认为你打算这样做:

set -o filec
set -o noglob

set不带任何选项的参数会将参数设置为 shell 的参数。从man mksh:

可以使用 +-o 更改选项选项语法,其中 option 是选项的长名称,或使用 +-语法,其中 是选项的单字母名称(并非所有选项都有单字母名称)。

(但至少我找不到名为filecin 的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#!则 - 行将被忽略。


由于您的脚本看起来像 atcshcsh脚本(set语法绝对正确,这些 shell 也有一个filecshell 选项,但据我所知,该$@变量不在其中):csh

如果它是您正在编写的cshortcsh脚本,然后确保使用 or 调用该脚本,或者cshtcsh如果该脚本是可执行的并且在没有显式解释器的情况下调用,则该#!行指向这两个中适当的一个。

简而言之,确保您知道编写脚本所用的语言并使用正确的解释器。

相关内容