如何在外壳中操纵&特殊字符

时间:2019-01-21 14:00:38

标签: bash shell cut

我想在Shell脚本中操纵URL。我需要使用&分隔符来剪切URL,并获取相应的字符串。

我尝试了example="$(cut -d'&' -f2- <<< $1)",但是当我执行此代码并尝试echo $example时,它想执行$example的内容。

有人可以帮助我吗?

2 个答案:

答案 0 :(得分:2)

您可能只需要引用变量即可。

问题脚本:

#!/bin/bash
example="$(cut -d'&' -f2- <<< $1)"
echo $example

如果通过Shellcheck运行它,则会在输出中得到它:

example="$(cut -d'&' -f2- <<< $1)"
                              ^-- SC2086: Double quote to prevent globbing and word splitting.
echo $example
     ^-- SC2086: Double quote to prevent globbing and word splitting.

固定脚本:

#!/bin/bash
example="$(cut -d'&' -f2- <<< "$1")"
echo "$example"

答案 1 :(得分:1)

不,不是。

当您这样做:

example="$(cut -d'&' -f2- <<< $1)"

它尝试执行cut。作为测试:

ljm@verlaine[~]$ a='1&ls&3&4'
ljm@verlaine[~]$ example="$(cut -d'&' -f2- <<< $a)"
ljm@verlaine[~]$ echo $example
ls&3&4
ljm@verlaine[~]$ 

而且,尽管像iBug这样建议的报价是一个好主意和最佳实践,但在这里并不是绝对必需的。