我正在处理一个带有命令行参数的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}');
答案 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}'