我正在使用tcsh
shell 制作一个简单的 shell 脚本。我分配了一个变量作为稍后使用的命令。但单引号内的括号消失了。
set aaa = "test '10' '{}' ' " ; echo $aaa
结果显示
test '10' '' '
为什么会出现这种情况?如果我单独使用{}
and''
就可以了。
set aaa = "test '10' {} '' ' " ; echo $aaa
test '10' {} '' '
答案1
我认为这与 csh 在参数扩展后进行大括号扩展有关。它确实{}
独自留下了,但它似乎{}
从例如中删除了foo{}
。 (我不知道为什么它不只是将其转换为空字符串,即使大括号之间基本上有一个空列表。我认为在其他 shell 中{}
或{foo}
内部只有一项不会触发大括号扩展。)
引用扩展以避免这种情况。
> set a = 'foo{a,b}'
> echo $a
fooa foob
> set b = '{}'
> echo $b
{}
> set c = 'foo{}'
> echo $c
foo
> echo "$c"
foo{}
还有你的具体情况:
> set aaa = "test '10' '{}' ' "
> echo "$aaa"
test '10' '{}' '