Bash shell脚本令人困惑的命令行参数$ 1 vs awk $ 11

时间:2010-12-29 08:15:29

标签: bash shell

我正在处理一个带有命令行参数的shell脚本(第1行)。 第2行,我想输出awk'{print $ 11}'的结果并将其存储到CURRENT_TAG中, 然而,当遇到打印$ 11时,它会自动尝试将命令行参数$ 1插入该位置。我怎么能避免这个?在$之前放一个\不起作用。

谢谢,

WORKING_COPY=$1;
CURRENT_TAG=$(ls -l ~/working/svn/$WORKING_COPY/tags/current | grep "current \-\>" | awk '{print $11}');

3 个答案:

答案 0 :(得分:3)

从您的问题看来,当前是一个符号链接(或者可能是一个名为current的目录,其中包含一个名为current的符号链接),并且您正在尝试找出该链接引用的内容。您可以使用readlink

CURRENT_TAG=$(readlink ~/working/svn/$WORKING_COPY/tags/current)

OR

CURRENT_TAG=$(readlink ~/working/svn/$WORKING_COPY/tags/current/current)

答案 1 :(得分:0)

您脚本的修改版本对我来说很好。你是如何执行你的脚本的?

markrose@shuttle:/tmp$ cat test.sh
#!/bin/bash

WORKING_COPY=$1;
CURRENT_TAG=$(ls -l /tmp/$1 | awk '{print $1}');
echo $1
echo $CURRENT_TAG
markrose@shuttle:/tmp$ ./test.sh blog.jpeg 
blog.jpeg
-rw-r--r--
markrose@shuttle:/tmp$ bash ./test.sh blog.jpeg
blog.jpeg
-rw-r--r--

对于它的价值,我的ls -l输出只有8个字段,最后一个是文件名(至少文件名/路径不包含空格而LFS环境变量没有设置)。

答案 2 :(得分:0)

如上所述, 以这种方式使用ls是一个坏主意。

您是说CURRENT_TAG的内容与附加“1”的WORKING_COPY的内容相同?

请注意,转义>会使其变得特别而非常规。你应该做grep "current ->"

请注意,AWK可以对您使用grep进行选择。

awk '/current ->/{print $11}'