我试图写一个csh别名(是的,它必须是csh,上帝,我希望它没有#)。我想传入一个变量名称,具体取决于它是否已设置。我将代码简化为以下内容。令我困惑的是第一个echo打印1或0取决于是否设置了值,但if中的echo始终打印为空。
alias trythis 'eval echo \$\?\!:1 ; eval if \$\?\!:1 then ; echo empty ; endif ; '
假设发生的事情是,如果你传入PATH它不应该打印任何东西,但是如果你传入PATHx它应该打印为空。 (是的,if可能是倒退了,但我撕掉了!以使事情变得更简单)
所以试试这个PATH应该打印为空,并且尝试这个PATHx应该什么都不打印
答案 0 :(得分:1)
关于原始代码的误导性部分是,您没有正确地为第二个评估语句转义分号,例如:以下部分:
eval if \$\?\!:1 then ; echo empty ; endif ;
这里有三个要由shell执行的语句:
eval if \$\?\!:1 then
- 这将无声地失败/无所事事echo empty
- 这将始终打印空 endif
- 这不会做任何事情(不确定为什么csh不会在这里抱怨)这是一个带有转义分号的更新版本,因此您可以将前三个语句作为单个语句执行:
alias trythis 'eval echo \$\?\!:1 ; eval if \$\?\!:1 then \; echo empty \; endif ;'
当你说你想在if中放入多个命令时,我不确定你的意思。您是否正在寻找一种方法来在一个if语句或其他内容中测试多个命令的结果?也许这是一个新的堆栈溢出问题。
答案 1 :(得分:0)
刚发现这个有效:
alias trythis 'eval set xxx=\$\?\!:1 ; echo $xxx ; if ( $xxx == 0 ) echo empty ; '
我想有一种形式的if if不需要当时。很高兴我不想在if中使用很多命令。 csh真的让我感到困惑。
如果有人可以展示如何使用if放置多个命令,那就太棒了