" AWK"和" cut"在bash脚本中表现不同

时间:2016-10-09 12:31:08

标签: bash shell awk

我试图从单引号开始剪切下面的字符串:

name1=O'Reilly

所以离开:

name2=Reilly

使用以下命令从命令行轻松实现:

echo $name | cut -d\' -f
echo $name | awk -F\' '{print $2}'

但是,当我从脚本运行这些命令时,字符串保持不变。我一直在研究使用单引号作为分隔符但无法找到任何内容的问题。有什么方法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

这不会改变变量扩展的字符串,只输出字符串操作的结果。

如果要为变量name创建新引用,请使用命令替换将cut / awk操作的结果保存为变量name

% name="O'Reilly"                           

% echo "$name" | awk -F\' '{print $2}'        
Reilly

% name=$(echo "$name" | awk -F\' '{print $2}')

% echo "$name"                              
Reilly

另一方面,如果要将输入声明为一个(name1),并将输出另存为另一个变量(name2):

% name1="O'Reilly"                          

% name2=$(echo "$name1" | awk -F\' '{print $2}')

% echo "$name2"                               
Reilly

这可能更容易使用参数扩展:

$ name="O'Reilly"

$ echo "${name#*\'}"
Reilly

$ name="${name#*\'}"

$ echo "$name"
Reilly