当我使用以下代码行时,出现错误非法变量名:
set users = "` last | sort | tr -s '\t' ' ' | grep '[0,2][0-4]:[0-5][0-9] -' | grep -v '^$' | grep -v '[2][0-1]:[0-5][0-9] -' `"
但是当我使用此代码时,它工作正常:
set users = "` last | sort | tr -s '\t' ' ' | grep '[0,2][0-4]:[0-5][0-9] -' | grep -v '[2][0-1]:[0-5][0-9] -' `"
该代码应将在22:00至05:00(不包括05:00)之间登录的用户存储到名为users的变量中。它还应删除输出中的所有空行。这是我在第一个代码中要尝试的操作,但是它给了我上述错误。
答案 0 :(得分:1)
我不知道如何解释它,但这是典型的CSH陷阱之一。
<双引号>( 这正是您的问题所在。你也写过类似的东西 ,即使 如果您使用来自 util-linux 的 这将匹配用户在22 en 05(excl)之间登录并且可能仍在登录的所有行。$
)之间的"
)(如果它们位于`
)和'
)始终被认为是变量名。因此,如果$ grep "foo$" file.txt
Illegal variable name.
$ set var = "`grep -v '^$' file.txt`"
last
,您可能会对标记--since
和--until
感兴趣(请参阅here和here)。否则,您可以使用以下命令行:set users="`last | awk '/(2[2-3]|0[0-4]):.. [-s]/'`"