set myname = '*' 后,为什么echo $myname return 是当前文件夹下所有脚本的名字?
After set myname = '*', why does echo $myname return the names of all scripts in the current folder?
我很惊讶地从我的 csh 代码 中得到以下输出:
set myname = '*'
echo $myname
这会打印出我正在执行 bash 脚本的文件夹中所有脚本名称的列表:
myprogm1.py myprogrm2.py …
我想把一个简单的字符串交给我的名字:as star symbol
'*'
如何防止我的脚本打印名称列表并仅将 *
解释为字符串?
实际上,由于单引号,您的变量正确地获得了星号作为值。但是,当您调用 echo
时,星号会扩展为通配符并匹配每个文件。为避免这种情况,只需将您的变量放在双引号之间:
set myname='*'
echo "$myname"
每日关键词:"metacharacters"。找到你的 shell 的元字符...它们在 Borne 和 C shell 之间有很大的不同。
Shell 会在每次执行行时扩展行。因此,虽然 myname 确实包含所需的星号,但当它在没有被引用的情况下展开时,shell 会看到一个孤立的星号并展开它。
如果您经常在命令行中无情地引用变量,就可以避免各种问题。
另一个 "problem character" 是 space,尤其是在文件名中。如果不加引号,每个 space 都会导致扩展时断字。像
这样的命令非常糟糕
set a = "hello world"
set b = "foo bar"
cp "$a" $b; # becomes cp "hello world" "foo" "bar"
rm $a; # becomes rm "foo" "bar"
我很惊讶地从我的 csh 代码 中得到以下输出:
set myname = '*'
echo $myname
这会打印出我正在执行 bash 脚本的文件夹中所有脚本名称的列表:
myprogm1.py myprogrm2.py …
我想把一个简单的字符串交给我的名字:as star symbol
'*'
如何防止我的脚本打印名称列表并仅将 *
解释为字符串?
实际上,由于单引号,您的变量正确地获得了星号作为值。但是,当您调用 echo
时,星号会扩展为通配符并匹配每个文件。为避免这种情况,只需将您的变量放在双引号之间:
set myname='*'
echo "$myname"
每日关键词:"metacharacters"。找到你的 shell 的元字符...它们在 Borne 和 C shell 之间有很大的不同。
Shell 会在每次执行行时扩展行。因此,虽然 myname 确实包含所需的星号,但当它在没有被引用的情况下展开时,shell 会看到一个孤立的星号并展开它。
如果您经常在命令行中无情地引用变量,就可以避免各种问题。
另一个 "problem character" 是 space,尤其是在文件名中。如果不加引号,每个 space 都会导致扩展时断字。像
这样的命令非常糟糕set a = "hello world" set b = "foo bar" cp "$a" $b; # becomes cp "hello world" "foo" "bar" rm $a; # becomes rm "foo" "bar"