tcsh:错误:$()中的修饰符

时间:2015-02-26 06:35:18

标签: shell tcsh modifier

我想传递给我的tcsh脚本的最后一个参数。我注意到,通过echo测试,

echo ${*: -1:1}

返回一系列或参数中的LAST参数。太好了!

问题是,当我尝试将其放入if语句或附加到它时,我收到“Bad:modifier in $()”错误。这是为什么?

if ( -r ${*: -1:1}) then
    echo "You have read permissions"
else

或同样的问题:

if ( ${*: -1:1}:e != tex) then
    exit 2
endif

我尝试了推送

${*: -1:1} 

在括号中,但无济于事。我也尝试过设置变量

set last = {*: -1:1}

然后在if语句中调用$ last,但这给了我一个“Missing}”错误。

思考?谢谢。

2 个答案:

答案 0 :(得分:1)

嗯,你回答了自己的问题,但tcsh(以及csh)也有办法:

set count=$#argv
echo "There are $count arguments"
set last="${argv[$#argv]}"
echo "The last argument is $last"

如果您想从csh中的列表中提取单词,请确保使用大括号{}

<强>测试

$ ./lastarg.csh 'a b' 'c d' 'e  f'
There are 3 arguments
The last argument is e  f

答案 1 :(得分:0)

结束使用

set Y = `echo $* | awk -F " " '{print $NF}'`

代替我的最后一个参数,这与tcsh兼容。为我解决了!