Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何在两个'';_Bash - Fatal编程技术网

Bash 如何在两个'';

Bash 如何在两个'';,bash,Bash,我正在编写一个脚本,该脚本接收以下格式的字符串: ACTIVE '/dev/xenlvm/backups' [20.00 GiB] inherit 我需要介于“”之间的子字符串,so/dev/xenlvm/backups 我知道我可以使用##*运算符和%%,但我总是将其与字符[]一起使用。如果分隔符为“”,如何指定它 tmp=${var##*[} echo "${tmp%%]*}" 非常感谢;) 您可以使用: 剪切-剪切文件每行的选定字段 单引号是此处的自然分隔符,因此

我正在编写一个脚本,该脚本接收以下格式的字符串:

ACTIVE            '/dev/xenlvm/backups' [20.00 GiB] inherit
我需要介于“”之间的子字符串,so/dev/xenlvm/backups

我知道我可以使用##*运算符和%%,但我总是将其与字符[]一起使用。如果分隔符为“”,如何指定它

tmp=${var##*[}
echo "${tmp%%]*}"
非常感谢;)

您可以使用:

剪切-剪切文件每行的选定字段

单引号是此处的自然分隔符,因此如下所示:

path=$(echo $stuff | cut -f2 -d"'")
当然,这假设您不必处理嵌套或转义单引号。

您可以使用:

剪切-剪切文件每行的选定字段

单引号是此处的自然分隔符,因此如下所示:

path=$(echo $stuff | cut -f2 -d"'")

当然,这假设您不必处理嵌套或转义单引号。

另一种方法是使用
read
shell内置。这些通常比执行外部命令更快

bash-4.2$ tmp="ACTIVE            '/dev/xenlvm/backups' [20.00 GiB] inherit"
bash-4.2$ IFS="'" read path path blah <<< "$tmp"
bash-4.2$ echo "$path"
/dev/xenlvm/backups
bash-4.2$tmp=“ACTIVE'/dev/xenlvm/backups'[20.00 GiB]继承”

bash-4.2$IFS=“””读取路径blah另一种选择是使用
read
shell内置。这些通常比执行外部命令更快

bash-4.2$ tmp="ACTIVE            '/dev/xenlvm/backups' [20.00 GiB] inherit"
bash-4.2$ IFS="'" read path path blah <<< "$tmp"
bash-4.2$ echo "$path"
/dev/xenlvm/backups
bash-4.2$tmp=“ACTIVE'/dev/xenlvm/backups'[20.00 GiB]继承”
bash-4.2$IFS=“””读取路径blah是否将其转义

$ tmp="ACTIVE            '/dev/xenlvm/backups' [20.00 GiB] inherit"
$ echo $tmp
ACTIVE '/dev/xenlvm/backups' [20.00 GiB] inherit
$ tmp="${tmp#*\'}"
$ echo $tmp
/dev/xenlvm/backups' [20.00 GiB] inherit
$ tmp="${tmp%\'*}"
$ echo $tmp
/dev/xenlvm/backups
逃避它

$ tmp="ACTIVE            '/dev/xenlvm/backups' [20.00 GiB] inherit"
$ echo $tmp
ACTIVE '/dev/xenlvm/backups' [20.00 GiB] inherit
$ tmp="${tmp#*\'}"
$ echo $tmp
/dev/xenlvm/backups' [20.00 GiB] inherit
$ tmp="${tmp%\'*}"
$ echo $tmp
/dev/xenlvm/backups

如果字符串的变化大于原始描述,则需要正则表达式。我会用像这样的东西

echo $line_of_file | sed -n -e "/ACTIVE/ s|.*'\(.*\)'.*|\1|p"

如果字符串的变化大于原始描述,则需要正则表达式。我会用像这样的东西

echo $line_of_file | sed -n -e "/ACTIVE/ s|.*'\(.*\)'.*|\1|p"

您的选项非常有效,因此因为分隔符是“我不能使用bash技巧”。谢谢你抽出时间;)@xavierds:可能有一个
${}
技巧可以做到这一点,但是
/usr/bin
中的所有内容也是shell脚本的一部分,因此没有理由不使用它。“它有效”通常是一个相当不错的起点:)我明白了,我将遵循这个;)。很抱歉,因为我是新来的,所以不能肯定地投你的票,祝你一周愉快;)您的选项非常有效,因此因为分隔符是“我不能使用bash技巧”。谢谢你抽出时间;)@xavierds:可能有一个
${}
技巧可以做到这一点,但是
/usr/bin
中的所有内容也是shell脚本的一部分,因此没有理由不使用它。“它有效”通常是一个相当不错的起点:)我明白了,我将遵循这个;)。很抱歉,因为我是新来的,所以不能肯定地投你的票,祝你一周愉快;)