shell字符串和程序执行

时间:2012-10-08 13:59:01

标签: linux shell

以下代码用于在完全位置创建文件。但是运行test.sh abc的结果是

  

touch:缺少文件操作数

#! /bin/sh
#test.sh
location='~/configuration/'$1
echo $location
touch `$location`

有什么不对吗?谢谢!

4 个答案:

答案 0 :(得分:2)

通过将$location放入反引号中,您尝试执行 $location的值并将其用作touch的参数(请参阅{{ 3}},第3.4.5节)只做:

touch $location

如果您使用#!/bin/sh值运行-x,您会更清楚地看到bash在您的shell脚本中正在执行的操作。这是调试脚本的一种非常有用的方法。

答案 1 :(得分:2)

当您将~放入引号时,它会失去其特殊含义。你需要:

#! /bin/sh
#test.sh
location=~/configuration/"$1"
echo "$location"
touch "$location"

你应该养成一直把变量放在双引号中的习惯(直到你了解不想要引号的特定时间)。

答案 2 :(得分:1)

位置是文件夹还是文件? 如果文件-f如果文件夹-d在下面的脚本--- bash应该理解〜

#! /bin/bash
#test.sh
var1=$1;
location=~/configuration/$var1
echo $location

if [ ! -f $location ]; then
 echo "not found touching $location"
 touch `$location`
fi

答案 3 :(得分:0)

有几种方法可以做到这一点,但第一个问题是改为

touch `echo $location`

但我觉得做起来可能更简单

touch ~/configuration/$1