相关疑难解决方法(0)

为什么shell忽略通过变量传递给它的参数中的引号?

这与宣传的一样:

# example 1
#!/bin/bash
grep -ir 'hello world' .
Run Code Online (Sandbox Code Playgroud)

这不是:

# example 2
#!/bin/bash
argumentString="-ir 'hello world'"
grep $argumentString .
Run Code Online (Sandbox Code Playgroud)

尽管'hello world'在第二个例子中被引号括起来,但grep解释'hello为一个参数和world'另一个参数,这意味着,在这种情况下,'hello将是搜索模式world'并将成为搜索路径.

同样,这仅在从argumentString变量扩展参数时发生.grep 'hello world'在第一个示例中正确解释为单个参数.

谁能解释为什么会这样?有没有一种正确的方法来扩展一个字符串变量,它将保留每个字符的语法,以便shell命令正确解释它?

variables syntax bash quoting expansion

33
推荐指数
3
解决办法
6094
查看次数

非选项后的-maxdepth选项AND find:paths必须位于表达式之前

希望有人能帮忙解决这个问题:

我试图用这个命令删除/ tmp上的会话文件:

find /tmp -name 'sess_*' -user Username -maxdepth 1 $CMD {} \;
Run Code Online (Sandbox Code Playgroud)

但是我遇到了这些错误:

find:warning:在非选项参数-name之后指定了-maxdepth选项,但选项不是位置的(-maxdepth影响在它之前指定的测试以及之后指定的测试).请在其他参数之前指定选项.

find: paths must precede expression Usage: find [-H] [-L] [-P] [path...] [expression]
Run Code Online (Sandbox Code Playgroud)

我在网上寻找解决方案但找不到任何解决方案.我已经删除了其他命令的其他tmp文件,并想知道是否影响了一些卷或套接字.

先感谢您

linux

12
推荐指数
1
解决办法
2万
查看次数

mv命令在命令行上单独工作,但不能通过脚本工作

我有一个包含文件名的fodler,其中包含空格.

我创建了一个替换空格的脚本,并使用_而不是""(空格)创建新文件名,并在for循环中运行mv命令.

这在脚本中没有用,并给我以下消息.

   Usage: mv [-I] [ -d | -e] [-i | -f] [-E{force|ignore|warn}] [--] src target
   or: mv [-I] [-d | -e] [-i | -f] [-E{force|ignore|warn}] [--] src1 ... srcN directory
Run Code Online (Sandbox Code Playgroud)

但是如果我调试shell脚本并单独提取mv命令并运行它,它确实可以正常工作而没有任何问题.

生成的命令看起来像

   mv "abc  ddd eee.txt" abc_ddd_eee.txt
Run Code Online (Sandbox Code Playgroud)

你能否告诉我为什么在unix盒子上输入的命令工作正常而不是通过脚本?

整个脚本:

     for i in * 
      do 
       v1=$(echo $i|sed -e 's/^/"/g' -e 's/$/"/g' )
       v2=$(echo $v1|sed 's/ /_/g'|
             awk -F "[-.]" '{print $2,"_",$1,".",$3}'|
             sed 's/ //g'|
             sed -e 's/^_//g' -e 's/"$//g'|
             sed 's/"//2' )        
       mv $v1 $v2

      done
Run Code Online (Sandbox Code Playgroud)

unix bash shell sh

1
推荐指数
1
解决办法
330
查看次数

标签 统计

bash ×2

expansion ×1

linux ×1

quoting ×1

sh ×1

shell ×1

syntax ×1

unix ×1

variables ×1