Questions tagged «quoting»

字符串通常用引号分隔,这引起了处理包含引号的字符串的问题。

5
我们如何运行存储在变量中的命令?
$ ls -l /tmp/test/my\ dir/ total 0 我想知道为什么以下运行上述命令的方法失败还是成功? $ abc='ls -l "/tmp/test/my dir"' $ $abc ls: cannot access '"/tmp/test/my': No such file or directory ls: cannot access 'dir"': No such file or directory $ "$abc" bash: ls -l "/tmp/test/my dir": No such file or directory $ bash -c $abc 'my …
34 bash  shell  quoting  variable 

1
引号内的通配符
这将是一个简单的过程,但是在我的记忆中,当执行Shell脚本时,使用双引号将允许扩展globlob和变量。 但是在下面的代码中: #!/bin/sh echo *.sh echo "*.sh" echo '*.sh' echo $LANG echo "$LANG" echo '$LANG' 我得到这个结果: bob.sh redeployJboss.sh *.sh *.sh en_US.utf8 en_US.utf8 $LANG 因此,单引号可防止glob和变量扩展,而双引号仅允许变量扩展而没有glob? 我可以使用任何报价模式吗?

2
grep和转义一个美元符号
我想知道哪些文件具有字符串$Id$。 grep \$Id\$ my_dir/mylist_of_files 返回0次。 我发现我必须使用 grep \$Id$ my_dir/mylist_of_files 然后,我看到$Id输出中有,即已被匹配。 我怎么能匹配第二$,为什么不\$Id\$工作。 第二$个字符是否不是最后一个字符都没有关系。 我使用grep2.9。 在发布我的问题之前,我使用过Google ... 我找到了答案 要在名为test2的文件中搜索$(美元符号),请输入: grep \\ $ test2 为了强制外壳程序将\ $(单个反斜杠,美元符号)传递给grep命令,必须使用\\(双反斜杠)字符。\(单反斜杠)字符告诉grep命令将以下字符(在本示例中为$)视为文字字符而不是表达式字符。使用fgrep命令可避免使用转义字符(例如反斜杠)的必要性。 但我不明白grep \$Id为什么grep \\$Id\\$可行,为什么不可行。 我有点困惑...

6
检查输入数字是否为整数
我正在尝试检查输入是否为整数,并且已经遍历了一百次,但是没有看到错误。las,它不起作用,它会触发所有输入(数字/字母)的if语句 read scale if ! [[ "$scale" =~ "^[0-9]+$" ]] then echo "Sorry integers only" fi 我玩过引号,但要么错过了它,要么什么都没做。我做错了什么?有没有更简单的方法来测试输入是否仅仅是INTEGER?

4
引用ssh $ host $ FOO和ssh $ host“ sudo su user -c $ FOO”类型的构造
我经常最终会通过ssh发出复杂的命令。这些命令涉及管道到awk或perl单行,因此包含单引号和$。我既没有想出正确的报价规则,也没有找到好的参考。例如,考虑以下内容: # what I'd run locally: CMD='pgrep -fl java | grep -i datanode | awk '{print $1}' # this works with ssh $host "$CMD": CMD='pgrep -fl java | grep -i datanode | awk '"'"'{print $1}'"'" (请注意awk语句中的多余引号。) 但是我该如何使用它ssh $host "sudo su user -c '$CMD'"呢?在这种情况下是否有管理报价的一般方法?
30 bash  shell  ssh  quoting 

3
当使用单引号将特殊字符包装在shell中时,如何回显“单引号”?
我今天正在从http://www.tutorialspoint.com/unix/unix-quoting-mechanisms.htm阅读Shell教程 其中提到: 如果单引号出现在要输出的字符串中,则不应将整个字符串放在单引号中,而应使用反斜杠()进行如下操作: echo 'It\'s Shell Programming' 我在centos服务器上尝试了此操作,它不起作用,>提示您提示我输入更多内容。 我很纳闷,因为两个单引号每一个特殊字符转换为普通字符,其中包括逃逸符号\,但不包括本身的', 我应该怎么代表一个单引号'在单引号的词组?
26 shell  quoting 

2
如何在不知道远程用户的登录shell的情况下通过ssh执行任意简单的命令?
ssh 在运行时具有令人讨厌的功能: ssh user@host cmd and "here's" "one arg" 而不是cmd使用参数将其打开host,而是cmd使用空格将其和参数连接在一起,然后运行shell host来解释结果字符串(我猜这就是为什么调用它ssh而不是它的原因sexec)。 更糟糕的是,您不知道将使用什么shell来解释该字符串,因为user甚至登录的shell 都无法保证是Bo​​urne,因为仍然有人们在使用它tcsh作为登录shell,并且这种fish情况还在增加。 有办法解决吗? 假设我有一个命令作为存储一个在参数列表bash阵列,其每一个可以包含的非空字节的任何序列,是否有任何方式把它上执行host如user以一致的方式,无论该登录壳的user上host(我们假设这是主要的Unix shell系列之一:Bourne,csh,rc / es,fish)? 另一种合理的假设,我应该能够提出的是,有是sh在命令host中可用的$PATH是Bourne兼容。 例: cmd=( 'printf' '<%s>\n' 'arg with $and spaces' '' # empty $'even\n* * *\nnewlines' "and 'single quotes'" '!!' ) 我可以使用ksh/ zsh/ bash/ 在本地运行yash: $ "${cmd[@]}" <arg with $and spaces> <> <even …

5
为什么我需要为if引用变量,而不必为echo引用呢?
我读到您需要双引号来扩展变量,例如 if [ -n "$test" ]; then echo '$test ok'; else echo '$test null'; fi 将按预期工作,而 if [ -n $test ]; then echo '$test ok'; else echo '$test null'; fi $test ok即使$test为null 也会一直说。 但是为什么我们不需要引号echo $test呢?
26 shell  quoting 

4
带路径包含空格和通配符的字符串的Bash脚本错误
我无法了解Bash脚本编写的基础知识。这是我到目前为止的内容: #!/bin/bash FILES="/home/john/my directory/*.txt" for f in "${FILES}" do echo "${f}" done 我要做的就是.txt在for循环中列出所有文件,以便我可以对它们进行处理。但是中的my directory星号和中的空格*.txt不能很好地播放。我试过使用带双引号和不带双引号,带或不带大括号的变量名,但仍然无法打印所有.txt文件。 这是非常基本的事情,但是我仍然在努力,因为我累了并且无法直截了当。 我究竟做错了什么? 如果我的文件没有空格或星号,我已经能够成功应用上面的脚本...我不得不尝试使用或不使用双引号和花括号来使其正常工作。但是,当我同时拥有空格和星号时,一切都变得混乱了。

5
为什么回声会忽略我的引号字符?
这个问题是从Server Fault 迁移过来的,因为可以在Unix&Linux Stack Exchange上回答。 迁移 8年前。 该echo命令未包含我提供的完整文本。例如,如果我这样做: $ echo ' echo PARAM=` grep $ARG /var/tmp/setfile | awk '{print $2}' ` ' 它输出: echo PARAM=` grep $ARG /var/tmp/setfile | awk {print } ` '我的echo命令中的单引号()不包括在内。如果我改用双引号: $ echo " echo PARAM=` grep $ARG /var/tmp/setfile | awk '{print $2}' ` " echo根本不输出任何东西!为什么在第一个示例中省略单引号而在第二个示例中不输出任何内容?如何获得与输入内容完全相同的输出?
24 shell  quoting  echo 

5
为什么在[[]]测试中使用双引号?
假设我们在bash脚本中有2个整数: value1=5 value2=3 那为什么要在测试中使用双引号呢?例如: if [[ "$value1" -eq "$value2" ]] 为什么不只使用以下内容? if [[ $value1 -eq $value2 ]] 对我来说,双引号没有任何意义。
23 bash  shell  quoting  variable  test 

2
删除所有以问号开头的文件
我有一个文件夹,其中有大约4k个文件。其中一些文件以aa ?或!字符开头。我需要删除它们,但找不到可以这样做的表达式: rm -f ./?* 只是删除所有内容。我可能可以grep在ls上使用它,xargs并通过管道将其移动并将文件移动到另一个文件夹,但是我希望有这样做的正确方法。在?和!文件上均需要帮助。


2
为什么要在shell脚本中转​​义琐碎的字符?
我刚刚打开了一个旧的shell脚本(在Solaris上用旧的ksh88编写),发现在整个代码中重复了以下内容: [ -f $myfile ] && \rm -f $myfile 转义的反斜杠使我感到奇怪。 我知道这是故意的,因为在整个代码中都重复了这种(显然无用的)转义。原始作者早已不在,我无法与他取得联系以询问他。 这仅仅是作者的一个有趣的特质,还是某种在某个时间点变得有意义的已弃用的良好实践?也许实际上是推荐的做事方式,而我完全错过了一些东西?

5
如何删除名为“>”的文件?
我正在运行一个Python脚本,该脚本发生故障并用于sudo创建名为的文件>。 我如何摆脱这个文件? 当然,当我尝试时sudo rm >,会出现错误bash: syntax error near unexpected token 'newline',因为它认为我正在尝试重定向的输出rm。 其权限为-rw-r--r--。
22 bash  quoting  filenames  rm 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.