使用ls和awk定义变量

时间:2017-08-02 22:22:33

标签: awk

所有

我正在使用tcsh(我知道,这不好)。无论如何,我将变量定义为

set arqlink = `ls -aFl /usr/lib64/libelf* | awk '/->/{print $NF}' |
grep "libelf-0"`

但它不起作用,我不知道为什么,因为

ls -aFl /usr/lib64/libelf* | awk '/->/{print $NF}' | grep "libelf-0"

工作正常。

提前感谢。

最好的问候,

NC

2 个答案:

答案 0 :(得分:1)

默认情况下tcsh已设置nonomatch

   nonomatch
     If set, a Filename substitution or Directory stack substitution (q.v.) which
     does not match any existing files is left untouched rather than
     causing an error.

设置此项,您的线路将正常工作。

set nonomatch
set arqlink = `ls -aFl /usr/lib64/libelf* | awk '/->/{print $NF}' | grep "libelf-0"`

或者,使用stat,您无需设置nonomatch

set arglink = `stat -c %N /usr/lib64/libelf* | awk '/->/{print $NF}' | grep "libelf-0"`

最重要的是,-F迫使ls*附加到被视为no match的文件名。您还可以更改原始命令并删除-F

答案 1 :(得分:0)

删除=两侧的空格,并注意命令两侧添加的backtick(非单引号)。

set arqlink=`ls -aFl /usr/lib64/libelf* | awk '/->/{print $NF}' |
  grep "libelf-0"`