我很惊讶从 csh代码获得以下输出:
set myname = '*'
echo $myname
这会打印出我执行bash脚本的文件夹中所有脚本名称的列表:
myprogm1.py myprogrm2.py …
我想将一个简单的字符串移交给myname:as star symbol
'*'
如何阻止我的脚本打印名称列表并将*
解释为字符串?
答案 0 :(得分:3)
实际上,由于单引号,您的变量正确地将星号作为值。但是,当您调用echo
时,星号会扩展为通配符并匹配每个文件。要避免它,只需将变量放在双引号之间:
set myname='*'
echo "$myname"
(请注意,有很多differences between csh
and bash
syntax。)
答案 1 :(得分:0)
每日一词:“元字符”。找到shell的元字符......它们在Borne和C shell之间存在很大差异。
每次执行该行时,外壳都会展开行。因此,虽然myname确实包含所需的星号,但是当它被展开而没有被引用时,shell会看到一个孤立的星号并展开它。
如果你经常在命令行中无情地引用变量,你可以避免各种各样的问题。
另一个“问题字符”是空格,尤其是在文件名中。如果没有引用,则每个空格都会在扩展时导致单词中断。像
这样的命令非常糟糕set a = "hello world" set b = "foo bar" cp "$a" $b; # becomes cp "hello world" "foo" "bar" rm $a; # becomes rm "foo" "bar"