- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我尝试将参数作为变量传递给 bash 中的任何命令时,如果变量值有空格,我会看到 bash 添加了额外的引号。
我正在创建一个文件“some file.txt”并将其添加到变量 $file 中。我正在使用 $file 并将其存储在另一个变量 $arg 中,并在 $file 上加上引号。在 bash 进行变量扩展后我希望得到的命令是
find . -name "some text.txt"
但我得到了错误,实际执行的文件是,
find . -name '"some' 'file.txt"
为什么会这样。 bash 变量 expanson 在这种情况下如何工作?
$ touch "some file.txt"
$ file="some file.txt"
$ arg=" -name \"$file\""
$ find . $arg
find: paths must precede expression: file.txt"
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]
$ set -x
$ find . $arg
+ find . -name '"some' 'file.txt"'
find: paths must precede expression: file.txt"
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]
为什么会这样?
最佳答案
参数值中的引号在参数展开后被视为文字字符。您的尝试与
find . -name \"some file.txt\"
不是
find . -name "some file.txt"
要处理包含空格的参数,您需要使用数组。
file="some file.txt"
# Create an array with two elements; the second element contains whitespace
args=( -name "$file" )
# Expand the array to two separate words; the second word contains whitespace.
find . "${args[@]}"
关于狂欢 : Adding extra single quotes to strings with spaces,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33871500/
这是一个 bash 脚本,它打印视频的帧率,它所采用的参数可能包含空格。这个参数也将在脚本内的命令中使用。 #!/bin/bash inputVid="$*" #checking if $inputV
OSX Snow Leopard 上的 Bash 脚本,我想删除一组文件后缀中的任何一个,但我的 googlefu 失败了。 给定 file="filename_1" file1=${file%_1}
您好,正在尝试按月和日对列表进行排序。弄不直。有什么指点吗? 列表示例: Jul 23 Drive :NTFS (Windows 31.6 GB/29.4 GiB) Details : Mounted
我正在写一个 bash 脚本 我的文件是这样的: file="${nodeID}_00000_19700101010${ts}_udp_filtered.pcap"。是否可以使用任何 5 位数字代替
我正在尝试通过 bash 代码将文件名传输到 eog。 这是我的代码:ls | grep“ sample ” | head -1 其中 sample 是所需文件的名称。 我无法弄清楚如何将输出通过管道
我是 bash 的新手,我正在尝试编写一个 bash 脚本来保存用户的输入(一些标签),以帮助这个用户我想允许仅根据我个人的预定义标签列表完成而不是关于常见的TAB文件补全(文件夹中的文件名)。 pr
我有一个看起来像这样的字符串/foo/bar/baz59_ 5stuff.thing 如果最后一个数字(示例中的 5)大于另一个变量,我想将其增加一个。 9 将增加到 10。请注意,最后一个数字也可以
我可以用任何其他语言来做到这一点,但是对于 Bash,我四处寻找,却找不到答案。 我需要在脚本中手动增加 $line。示例: for line in `cat file` do foo()
我正在尝试剪切一个字符串,直到它成为第一个指定的字符。在这种情况下,它是第一个拉丁字母。 我厌倦了这个。它有点管用,但有时会移动 1 个或多个字符。 f=$(echo $f | tail -c $((
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 关闭 9 年前。 要求提供代码的问题必须表现出对所解决问题的最低限度的理解。包括尝试过的解决方案、为什么
我在名为 file.txt 的文件中有类似的内容 AA.201610.pancake.Paul AA.201610.hello.Robert A.201610.hello.Mark 现在,我只获得
我有这个脚本可以生成 8-16 之间的随机字符。我对如何从银行 [! @ # $ % ^ & * ( ) _ + ] 这个字符串中的任意位置? if [ $# -eq 0 ] then
我有以下 bash 脚本: 1 #!/bin/bash 2 query='query= SELECT * WHERE { ?s ?p ?o } LIMIT 5' 3 cmd="curl $
我正在尝试创建一个安装后 bash 脚本,我可以在全新安装 Ubuntu 时使用它。我想要的第一个功能是让脚本提示用户他们是否想更新他们的系统,如果他们选择是,则显示单词“正在加载”,后面跟着一个点循
我尝试使用 bash 脚本访问特定路径,但我的终端无法访问它。这是我非常简单的脚本: #!/bin/bash init() { cd $PATH ls -l } PATH="/Volu
以下命令通过递归搜索当前目录和所有子目录找到所有出现的“some string” grep -r -n 'some string' . 此命令递归搜索当前目录和所有子目录并返回 *.axvw 格式的
我想让我的一部分代码更有效率。我正在考虑让它分成多个进程并让它们一次执行 50/100 次,而不是一次。 例如(伪): for line in file; do foo; foo2; foo3; do
假设我有字符串“Memory Used: 19.54M”我如何从中提取 19.54?19.54 会经常变化,所以我需要将它存储在一个变量中,并与下一次迭代的值进行比较。 我想我需要 grep 和 re
我有一个简单的 bash 脚本如下 #!/bin/bash sleep 5000 当我尝试执行它时,出现了一个奇怪的错误 : No such file or directory 注意分号:。所有常见的
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 9 年前。 Improve this
我是一名优秀的程序员,十分优秀!