为什么 if 总是打印为空?试图测试传入的变量是否已设置?
why does the if always print empty? attempting to test whether passed in variable is set?
我正在尝试编写一个 csh 别名(是的,它必须是 csh,但愿它不是)。我想传入一个变量名,并根据它是否被设置或不对其进行操作。我已将代码归结为以下内容。令我困惑的是第一个 echo 打印 1 或 0 取决于是否设置了值,但是 if 中的 echo 总是打印空。
alias trythis 'eval echo $\?\!:1 ; eval if $\?\!:1 then ; echo empty ; endif ; '
假设发生的情况是,如果您传入 PATH,它不应该打印任何内容,但如果您传入 PATHx,它应该打印为空。 (是的,if 可能是倒过来的,但我去掉了 ! 让事情变得更简单)
所以 trythis PATH 应该打印为空,trythis PATHx 应该什么都不打印
刚刚发现这个有效:
alias trythis 'eval set xxx=$\?\!:1 ; echo $xxx ; if ( $xxx == 0 ) echo empty ; '
我想有一种形式的 if 不需要 then。很高兴我不想在 if 中加入很多命令。 csh 的语法真让我困惑。
如果有人能展示如何用 if 放置多个命令,那就太好了
关于您的原始代码的误导部分是您没有为第二个 eval 语句正确转义分号,例如以下部分:
eval if $\?\!:1 then ; echo empty ; endif ;
shell 执行三个语句:
eval if $\?\!:1 then
- 这将默默地失败/什么都不做
echo empty
- 这将始终打印 empty
endif
- 这什么都不做(不知道为什么 csh 不在这里抱怨)
这是一个带有转义分号的更新版本,因此您可以将前三个语句作为一个语句执行:
alias trythis 'eval echo $\?\!:1 ; eval if $\?\!:1 then \; echo empty \; endif ;'
当您说要在 if 中放置多个命令时,我不确定您的意思。您是否正在寻找一种方法来在一个 if 语句或其他语句中测试多个命令的结果?也许这是一个新的堆栈溢出问题。
我正在尝试编写一个 csh 别名(是的,它必须是 csh,但愿它不是)。我想传入一个变量名,并根据它是否被设置或不对其进行操作。我已将代码归结为以下内容。令我困惑的是第一个 echo 打印 1 或 0 取决于是否设置了值,但是 if 中的 echo 总是打印空。
alias trythis 'eval echo $\?\!:1 ; eval if $\?\!:1 then ; echo empty ; endif ; '
假设发生的情况是,如果您传入 PATH,它不应该打印任何内容,但如果您传入 PATHx,它应该打印为空。 (是的,if 可能是倒过来的,但我去掉了 ! 让事情变得更简单)
所以 trythis PATH 应该打印为空,trythis PATHx 应该什么都不打印
刚刚发现这个有效:
alias trythis 'eval set xxx=$\?\!:1 ; echo $xxx ; if ( $xxx == 0 ) echo empty ; '
我想有一种形式的 if 不需要 then。很高兴我不想在 if 中加入很多命令。 csh 的语法真让我困惑。
如果有人能展示如何用 if 放置多个命令,那就太好了
关于您的原始代码的误导部分是您没有为第二个 eval 语句正确转义分号,例如以下部分:
eval if $\?\!:1 then ; echo empty ; endif ;
shell 执行三个语句:
eval if $\?\!:1 then
- 这将默默地失败/什么都不做echo empty
- 这将始终打印 emptyendif
- 这什么都不做(不知道为什么 csh 不在这里抱怨)
这是一个带有转义分号的更新版本,因此您可以将前三个语句作为一个语句执行:
alias trythis 'eval echo $\?\!:1 ; eval if $\?\!:1 then \; echo empty \; endif ;'
当您说要在 if 中放置多个命令时,我不确定您的意思。您是否正在寻找一种方法来在一个 if 语句或其他语句中测试多个命令的结果?也许这是一个新的堆栈溢出问题。