linux终端执行echo函数

时间:2015-12-30 07:34:25

标签: linux bash

当我读到本书 linux shell scripting cookbook 时 他们说当你想要打印!时,你不应该用双引号,或者你可以在\之前添加!来逃避它。 例如

  1. $echo "Hello,world!"
  2. bash:!:找不到事件错误
  3. $echo "Hello,world\\!"
  4. 你好,世界!
  5. 但在我的情况下(ubuntu14.04),我得到了这样的答案:

    1. $echo "Hello,world!"
    2. 你好,世界!
    3. $echo "Hello,world\\!"
    4. 你好,世界!\
    5. 那么,为什么我的机器无法得到相同的答案?

      为什么将转义符号\打印为普通符号?

2 个答案:

答案 0 :(得分:2)

当您以交互方式键入shell时,!具有特殊含义,它是history expansion character。为了防止这种特殊含义,您需要将其放在单引号中或将其转义。

echo 'Hello, world!'
echo "Hello, world\!'

它在Ubuntu上没有发生的原因可能是因为它正在运行bash的更新版本,这显然对历史扩展何时更具选择性。似乎需要!后面跟着字母数字,而不是标点符号。

您不需要在脚本中执行此操作,因为通常不会在此处启用历史记录。它只适用于交互式shell。

答案 1 :(得分:0)

创建一个名为file.sh的shell脚本:

#!/bin/bash
# file.sh: a sample shell script to demonstrate the concept of Bash    shell functions
# define usage function
usage(){
   echo "Usage: $0 filename"
   exit 1
}

# define is_file_exits function 
# $f -> store argument passed to the script
is_file_exits(){
    local f="$1"
    [[ -f "$f" ]] && return 0 || return 1
}
# invoke  usage
# call usage() function if filename not supplied
[[ $# -eq 0 ]] && usage

# Invoke is_file_exits
if ( is_file_exits "$1" )
   then
    echo "File found"
 else
     echo "File not found"
fi

按以下方式运行

chmod +x file.sh
./file.sh
./file.sh /etc/resolv.conf