tcsh 在 shell 脚本中传递一个变量

tcsh passing a variable inside a shell script

我在 shell 脚本中定义了一个变量,我想使用它。出于某种原因,我无法将它传递到我需要它的命令行中。

这是我的脚本,在最后几行失败了

#! /usr//bin/tcsh -f
if ( $# != 2 ) then
        echo "Usage: jump_sorter.sh <jump> <field to sort on>"
        exit;
endif

set a = `cat  | tail -1` #prepares last row for check with loop 
set b =  #this is the value last row will be checked for

set counter = 0
foreach i ($a)

if ($i == "$b") then
    set bingo = $counter 
    echo "$bingo is the field to print from $a"
endif

set counter = `expr $counter + 1`
end

echo $bingo #this prints the correct value for using in the command below
cat  | awk '{print($bingo)}' | sort | uniq -c | sort -nr #but this doesn't work.

#when I use  instead of $bingo, it does work.

请问如何正确地将 $bingo 传递到最后一行?

更新:根据 Martin Tournoij 接受的答案,处理命令中“$”符号的正确方法是:

cat | awk "{print("$"$bingo)}" | sort | uniq -c | sort -nr

它不起作用的原因是因为变量仅在双引号 (") 内被替换,而不是单引号 ('),并且您使用的是单引号:

cat  | awk '{print($bingo)}' | sort | uniq -c | sort -nr

以下应该有效:

cat  | awk "{print($bingo)}" | sort | uniq -c | sort -nr

你这里也有错误:

#! /usr//bin/tcsh -f

应该是:

#!/usr/bin/tcsh -f 

请注意,通常不建议使用 csh 编写脚本;它有很多怪癖,并且缺少一些功能,例如功能。除非你真的需要使用csh,否则建议使用Bourne shell (/bin/sh, bash, zsh) 或者脚本语言(Python, Ruby, 等等)代替。